diff options
author | Kyle Butt <kyle+llvm@iteratee.net> | 2016-03-23 19:51:22 +0000 |
---|---|---|
committer | Kyle Butt <kyle+llvm@iteratee.net> | 2016-03-23 19:51:22 +0000 |
commit | 613112826e1088a90b3e95597b0f7049d35bcb4b (patch) | |
tree | a8f85c4bfaa3350ac658b3e8b552f6bce06e5803 /llvm/test | |
parent | f54146c1789544b7348823a3cc6f488009de630e (diff) | |
download | bcm5719-llvm-613112826e1088a90b3e95597b0f7049d35bcb4b.tar.gz bcm5719-llvm-613112826e1088a90b3e95597b0f7049d35bcb4b.zip |
Codegen: [PPC] Word Rotates are Zero Extending.
Add Word rotates to the list of instructions that are zero extending.
This allows them to be used in dot form to compare with zero.
llvm-svn: 264183
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/PowerPC/rlwinm-zero-ext.ll | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/rlwinm-zero-ext.ll b/llvm/test/CodeGen/PowerPC/rlwinm-zero-ext.ll new file mode 100644 index 00000000000..f174bb64ba3 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/rlwinm-zero-ext.ll @@ -0,0 +1,57 @@ +; RUN: llc -O2 < %s | FileCheck %s +target datalayout = "e-m:e-i64:64-n32:64" +target triple = "powerpc64le-unknown-linux-gnu" + +; CHECK-LABEL: test1 +define i8 @test1(i32 %a) { +entry: +; CHECK-NOT: rlwinm {{{[0-9]+}}}, {{[0-9]+}}, 0, 24, 27 +; CHECK: rlwinm. [[REG:[0-9]+]], {{[0-9]+}}, 0, 24, 27 +; CHECK-NOT: cmplwi [[REG]], 0 +; CHECK: beq 0 + %0 = and i32 %a, 240 + %1 = icmp eq i32 %0, 0 + br i1 %1, label %eq0, label %neq0 +eq0: + ret i8 102 +neq0: + ret i8 116 +} + +; CHECK-LABEL: test2 +define i8 @test2(i32 %a) { +entry: +; CHECK: rlwinm [[REG:[0-9]+]], {{[0-9]+}}, 0, 28, 23 +; CHECK: cmplwi [[REG]], 0 +; CHECK: beq 0 + %0 = and i32 %a, -241 + %1 = icmp eq i32 %0, 0 + br i1 %1, label %eq0, label %neq0 +eq0: + ret i8 102 +neq0: + ret i8 116 +} + +declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) + +; CHECK-LABEL: test3 +define i8 @test3(i32 %a, i32 %b) { +entry: +; CHECK-NOT: rlwnm {{{[0-9]+}}}, {{[0-9]+}}, {{{[0-9]+}}}, 28, 31 +; CHECK: rlwnm. [[REG:[0-9]+]], {{[0-9]+}}, 4, 28, 31 +; CHECK-NOT: cmplwi [[REG]], 0 +; CHECK: beq 0 + %left = shl i32 %a, %b + %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 32, i32 %b) + %right_amount = extractvalue {i32, i1} %res, 0 + %right = lshr i32 %a, %right_amount + %0 = or i32 %left, %right + %1 = and i32 %0, 15 + %2 = icmp eq i32 %1, 0 + br i1 %2, label %eq0, label %neq0 +eq0: + ret i8 102 +neq0: + ret i8 116 +} |