X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FSystemZ%2Fasm-18.ll;h=bec8deeb72ddf74d9b84f6e5d0c7f3459e6bf863;hb=1ff62e182e648c72e6fce4f9d7911f2edfd914d2;hp=fc71895cd7826baceea7df288157b4a17fe3d0b8;hpb=645d250b84fe0d097e7813b980ae58daeca2c2e6;p=oota-llvm.git diff --git a/test/CodeGen/SystemZ/asm-18.ll b/test/CodeGen/SystemZ/asm-18.ll index fc71895cd78..bec8deeb72d 100644 --- a/test/CodeGen/SystemZ/asm-18.ll +++ b/test/CodeGen/SystemZ/asm-18.ll @@ -353,3 +353,87 @@ define void @f16() { call void asm sideeffect "stepc $0", "r"(i32 %or2) ret void } + +; Test immediate OR involving high registers. +define void @f17() { +; CHECK-LABEL: f17: +; CHECK: stepa [[REG:%r[0-5]]] +; CHECK: oihh [[REG]], 4660 +; CHECK: stepb [[REG]] +; CHECK: oihl [[REG]], 34661 +; CHECK: stepc [[REG]] +; CHECK: oihf [[REG]], 12345678 +; CHECK: stepd [[REG]] +; CHECK: br %r14 + %res1 = call i32 asm "stepa $0", "=h"() + %or1 = or i32 %res1, 305397760 + %res2 = call i32 asm "stepb $0, $1", "=h,h"(i32 %or1) + %or2 = or i32 %res2, 34661 + %res3 = call i32 asm "stepc $0, $1", "=h,h"(i32 %or2) + %or3 = or i32 %res3, 12345678 + call void asm sideeffect "stepd $0", "h"(i32 %or3) + ret void +} + +; Test immediate OR involving low registers. +define void @f18() { +; CHECK-LABEL: f18: +; CHECK: stepa [[REG:%r[0-5]]] +; CHECK: oilh [[REG]], 4660 +; CHECK: stepb [[REG]] +; CHECK: oill [[REG]], 34661 +; CHECK: stepc [[REG]] +; CHECK: oilf [[REG]], 12345678 +; CHECK: stepd [[REG]] +; CHECK: br %r14 + %res1 = call i32 asm "stepa $0", "=r"() + %or1 = or i32 %res1, 305397760 + %res2 = call i32 asm "stepb $0, $1", "=r,r"(i32 %or1) + %or2 = or i32 %res2, 34661 + %res3 = call i32 asm "stepc $0, $1", "=r,r"(i32 %or2) + %or3 = or i32 %res3, 12345678 + call void asm sideeffect "stepd $0", "r"(i32 %or3) + ret void +} + +; Test immediate XOR involving high registers. +define void @f19() { +; CHECK-LABEL: f19: +; CHECK: stepa [[REG:%r[0-5]]] +; CHECK: xihf [[REG]], 305397760 +; CHECK: stepb [[REG]] +; CHECK: xihf [[REG]], 34661 +; CHECK: stepc [[REG]] +; CHECK: xihf [[REG]], 12345678 +; CHECK: stepd [[REG]] +; CHECK: br %r14 + %res1 = call i32 asm "stepa $0", "=h"() + %xor1 = xor i32 %res1, 305397760 + %res2 = call i32 asm "stepb $0, $1", "=h,h"(i32 %xor1) + %xor2 = xor i32 %res2, 34661 + %res3 = call i32 asm "stepc $0, $1", "=h,h"(i32 %xor2) + %xor3 = xor i32 %res3, 12345678 + call void asm sideeffect "stepd $0", "h"(i32 %xor3) + ret void +} + +; Test immediate XOR involving low registers. +define void @f20() { +; CHECK-LABEL: f20: +; CHECK: stepa [[REG:%r[0-5]]] +; CHECK: xilf [[REG]], 305397760 +; CHECK: stepb [[REG]] +; CHECK: xilf [[REG]], 34661 +; CHECK: stepc [[REG]] +; CHECK: xilf [[REG]], 12345678 +; CHECK: stepd [[REG]] +; CHECK: br %r14 + %res1 = call i32 asm "stepa $0", "=r"() + %xor1 = xor i32 %res1, 305397760 + %res2 = call i32 asm "stepb $0, $1", "=r,r"(i32 %xor1) + %xor2 = xor i32 %res2, 34661 + %res3 = call i32 asm "stepc $0, $1", "=r,r"(i32 %xor2) + %xor3 = xor i32 %res3, 12345678 + call void asm sideeffect "stepd $0", "r"(i32 %xor3) + ret void +}