[llvm-bugs] [Bug 44039] New: [MSP430][AVR][InstCombine][DAGCombine]Poor codegen for targets with no native shifts (2/8)

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Nov 18 02:41:20 PST 2019


https://bugs.llvm.org/show_bug.cgi?id=44039

            Bug ID: 44039
           Summary: [MSP430][AVR][InstCombine][DAGCombine]Poor codegen for
                    targets with no native shifts (2/8)
           Product: libraries
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Common Code Generator Code
          Assignee: unassignedbugs at nondot.org
          Reporter: joan.lluch at icloud.com
                CC: llvm-bugs at lists.llvm.org

A number of comparisons involving bit tests are converted into shifts by
InstCombine and DAGCombine. However, shifts are expensive for most 8 and 16 bit
targets with comparatively cheaper selects. 

It is desirable that selects are emitted instead of shifts for these targets.
The following cases were identified in TargetLowering and DAGCombine and were
fixed by:

https://reviews.llvm.org/D69116 
https://reviews.llvm.org/D69120
https://reviews.llvm.org/D69326
https://reviews.llvm.org/D70042

Cases in InstCombine remain to be fixed. In llvm-dev it has been suggested that
these cases should be fixed by reversing the current canonicalisation. I am
showing them in this and following reports:

REPORTED CASE:

Source code:

int testSExtICmp_0( int x )  // (InstCombineCasts:transformSExtICmp)
{
  return (x & 32) ? -1 : 0;
}

IR code:

define i16 @testSExtICmp_0(i16 %x) {
entry:
  %0 = shl i16 %x, 10
  %sext = ashr i16 %0, 15
  ret i16 %sext
}

MSP430 Target code:

testSExtICmp_0:
        mov.b   r12, r12
        swpb    r12
        add     r12, r12
        add     r12, r12
        swpb    r12
        sxt     r12
        rra     r12
        rra     r12
        rra     r12
        rra     r12
        rra     r12
        rra     r12
        rra     r12
        ret

AVR Target code:

testSExtICmp_0:
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        lsl     r24
        rol     r25
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        asr     r25
        ror     r24
        ret


EXPECTED RESULT:

Source code:

int testSExtICmp_0( int x )  // (InstCombineCasts:transformSExtICmp)
{
  return (x & 32) ? -1 : 0;
}


Expected IR code:

define i16 @testSExtICmp_0(i16 %x) {
entry:
  %and = and i16 %x, 32
  %tobool = icmp ne i16 %and, 0
  %cond = sext i1 %tobool to i16
  ret i16 %cond
}


Expected MSP430 Target code: 

testSExtICmp_0:
        mov     r12, r13
        mov     #-1, r12
        bit     #32, r13
        jne     .LBB1_2
        clr     r12
.LBB1_2:
        ret


Expected AVR Target code:

testSExtICmp_0:
        mov     r18, r24
        mov     r19, r25
        andi    r18, 32
        andi    r19, 0
        ldi     r24, 0
        ldi     r25, 0
        cp      r18, r24
        cpc     r19, r25
        breq    LBB1_2
        ldi     r24, 255
        ldi     r25, 255
LBB1_2:
        ret

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20191118/f978f87d/attachment.html>


More information about the llvm-bugs mailing list