diff options
| author | Nemanja Ivanovic <nemanja.i.ibm@gmail.com> | 2018-04-11 21:25:44 +0000 |
|---|---|---|
| committer | Nemanja Ivanovic <nemanja.i.ibm@gmail.com> | 2018-04-11 21:25:44 +0000 |
| commit | c564dc060aec5f2bda9983fc4a2a318c971e94e1 (patch) | |
| tree | f9d50785e2aacf7f2764af6daea0156234460944 /llvm/test | |
| parent | e69b33f232c96d3d5ec706e6426a16aa79f635d0 (diff) | |
| download | bcm5719-llvm-c564dc060aec5f2bda9983fc4a2a318c971e94e1.tar.gz bcm5719-llvm-c564dc060aec5f2bda9983fc4a2a318c971e94e1.zip | |
[PowerPC] Fix condition for 64-bit rotate when replacing r+r instr with r+i
This patch fixes https://bugs.llvm.org/show_bug.cgi?id=37039
The condition only covers one of the two 64-bit rotate instructions. This just
adds the second (RLDICLo).
Patch by Josh Stone.
llvm-svn: 329852
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir b/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir index 0b7181e5a67..d1058e3e659 100644 --- a/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir +++ b/llvm/test/CodeGen/PowerPC/convert-rr-to-ri-instrs.mir @@ -571,6 +571,16 @@ } ; Function Attrs: norecurse nounwind readnone + define i64 @testRLDICLo3(i64 %a, i64 %b) local_unnamed_addr #0 { + entry: + %shr = lshr i64 %a, 11 + %and = and i64 %shr, 16777215 + %tobool = icmp eq i64 %and, 0 + %cond = select i1 %tobool, i64 %b, i64 %and + ret i64 %cond + } + + ; Function Attrs: norecurse nounwind readnone define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 { entry: %shl = shl i32 %a, 4 @@ -3976,6 +3986,60 @@ body: | ... --- +name: testRLDICLo3 +# CHECK-ALL: name: testRLDICLo3 +alignment: 4 +exposesReturnsTwice: false +legalized: false +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: g8rc, preferred-register: '' } + - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } + - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } + - { id: 3, class: crrc, preferred-register: '' } + - { id: 4, class: g8rc, preferred-register: '' } +liveins: + - { reg: '$x3', virtual-reg: '%0' } + - { reg: '$x4', virtual-reg: '%1' } +frameInfo: + isFrameAddressTaken: false + isReturnAddressTaken: false + hasStackMap: false + hasPatchPoint: false + stackSize: 0 + offsetAdjustment: 0 + maxAlignment: 0 + adjustsStack: false + hasCalls: false + stackProtector: '' + maxCallFrameSize: 4294967295 + hasOpaqueSPAdjustment: false + hasVAStart: false + hasMustTailInVarArgFunc: false + savePoint: '' + restorePoint: '' +fixedStack: +stack: +constants: +body: | + bb.0.entry: + liveins: $x3, $x4 + + %1 = COPY $x4 + %0 = LI8 2 + %2 = RLDICLo %0, 32, 32, implicit-def $cr0 + ; CHECK: ANDIo8 %0, 0 + ; CHECK-LATE: li 3, 2 + ; CHECK-LATE: andi. 3, 3, 0 + %3 = COPY killed $cr0 + %4 = ISEL8 %1, %2, %3.sub_eq + $x3 = COPY %4 + BLR8 implicit $lr8, implicit $rm, implicit $x3 + +... +--- name: testRLWINM # CHECK-ALL: name: testRLWINM alignment: 4 |

