http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56102



             Bug #: 56102

           Summary: Wrong rtx cost calculated for Thumb1

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: target

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: amker.ch...@gmail.com





For below program:



double g = 1.0;

double func(int a, double d)

{

    if (a > 0)

    return 0.0 + g;

    else

    return 2.0 + d;

}



compiling with:

./arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -Os test.c -S -o test.S



The assembly code is:

    .cpu cortex-m0

    .fpu softvfp

    .eabi_attribute 20, 1

    .eabi_attribute 21, 1

    .eabi_attribute 23, 3

    .eabi_attribute 24, 1

    .eabi_attribute 25, 1

    .eabi_attribute 26, 1

    .eabi_attribute 30, 4

    .eabi_attribute 34, 0

    .eabi_attribute 18, 4

    .code    16

    .file    "main.c"

    .global    __aeabi_dadd

    .text

    .align    1

    .global    func

    .code    16

    .thumb_func

    .type    func, %function

func:

    push    {r3, lr}

    cmp    r0, #0

    ble    .L2

    ldr    r3, .L6+16

    ldr    r0, [r3]

    ldr    r1, [r3, #4]

    ldr    r3, .L6+4

    ldr    r2, .L6

    b    .L4

.L2:

    mov    r0, r2

    mov    r1, r3

    ldr    r2, .L6+8

    ldr    r3, .L6+12

.L4:

    bl    __aeabi_dadd

    @ sp needed

    pop    {r3, pc}

.L7:

    .align    3

.L6:

    .word    0

    .word    0

    .word    0

    .word    1073741824

    .word    .LANCHOR0

    .size    func, .-func

    .global    g

    .data

    .align    3

    .set    .LANCHOR0,. + 0

    .type    g, %object

    .size    g, 8

g:

    .word    0

    .word    1072693248

    .ident    "GCC: (GNU) 4.8.0 20130122 (experimental)"



The problem is double word constant isn't split by GCC, causing bigger code

size.

Reply via email to