diff options
author | Richard Osborne <richard@xmos.com> | 2014-02-27 13:20:11 +0000 |
---|---|---|
committer | Richard Osborne <richard@xmos.com> | 2014-02-27 13:20:11 +0000 |
commit | d6e85018c5f21381db8b8fab9416488c9c970d4d (patch) | |
tree | 04ae4a418bb0aa70149532e726158e4441044cf6 /llvm/test/CodeGen/XCore/resources_combine.ll | |
parent | 2d3a2bee41663b058802c270597e5700256c3244 (diff) | |
download | bcm5719-llvm-d6e85018c5f21381db8b8fab9416488c9c970d4d.tar.gz bcm5719-llvm-d6e85018c5f21381db8b8fab9416488c9c970d4d.zip |
[XCore] Add dag combines for instructions that ignore some input bits.
These instructions ignore the high bits of one of their input operands -
try and use this to simplify the code.
llvm-svn: 202394
Diffstat (limited to 'llvm/test/CodeGen/XCore/resources_combine.ll')
-rw-r--r-- | llvm/test/CodeGen/XCore/resources_combine.ll | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/XCore/resources_combine.ll b/llvm/test/CodeGen/XCore/resources_combine.ll index 50ac30e905b..20c184a53b9 100644 --- a/llvm/test/CodeGen/XCore/resources_combine.ll +++ b/llvm/test/CodeGen/XCore/resources_combine.ll @@ -5,6 +5,10 @@ declare i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r) declare i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r) declare i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r) declare i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r) +declare void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value) +declare void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value) +declare void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value) +declare void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value) define i32 @int(i8 addrspace(1)* %r) nounwind { ; CHECK-LABEL: int: @@ -50,3 +54,40 @@ define i32 @getts(i8 addrspace(1)* %r) nounwind { %trunc = and i32 %result, 65535 ret i32 %result } + +define void @outt(i8 addrspace(1)* %r, i32 %value) nounwind { +; CHECK-LABEL: outt: +; CHECK-NOT: zext +; CHECK: outt res[r0], r1 +; CHECK-NEXT: retsp 0 + %trunc = and i32 %value, 255 + call void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %trunc) + ret void +} + +define void @outct(i8 addrspace(1)* %r, i32 %value) nounwind { +; CHECK-LABEL: outct: +; CHECK-NOT: zext +; CHECK: outct res[r0], r1 + %trunc = and i32 %value, 255 + call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %trunc) + ret void +} + +define void @chkct(i8 addrspace(1)* %r, i32 %value) nounwind { +; CHECK-LABEL: chkct: +; CHECK-NOT: zext +; CHECK: chkct res[r0], r1 + %trunc = and i32 %value, 255 + call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %trunc) + ret void +} + +define void @setpt(i8 addrspace(1)* %r, i32 %value) nounwind { +; CHECK-LABEL: setpt: +; CHECK-NOT: zext +; CHECK: setpt res[r0], r1 + %trunc = and i32 %value, 65535 + call void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %trunc) + ret void +} |