diff options
author | Dan Gohman <gohman@apple.com> | 2009-04-14 22:17:14 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-04-14 22:17:14 +0000 |
commit | e5cd1fcdb93d2e3bad26344f5ada17857a0253b2 (patch) | |
tree | eefd98d4c0d7f1c13422cfe941d268797a84cb4b /llvm/test/CodeGen/X86/h-registers-0.ll | |
parent | b4a8fe8dcc910e57be42ed62c3106fafd6d6e195 (diff) | |
download | bcm5719-llvm-e5cd1fcdb93d2e3bad26344f5ada17857a0253b2.tar.gz bcm5719-llvm-e5cd1fcdb93d2e3bad26344f5ada17857a0253b2.zip |
When the result of an EXTRACT_SUBREG, INSERT_SUBREG, or SUBREG_TO_REG
operator is used by a CopyToReg to export the value to a different
block, don't reuse the CopyToReg's register for the subreg operation
result if the register isn't precisely the right class for the
subreg operation.
Also, rename the h-registers.ll test, now that there are more
than one.
llvm-svn: 69087
Diffstat (limited to 'llvm/test/CodeGen/X86/h-registers-0.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/h-registers-0.ll | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/h-registers-0.ll b/llvm/test/CodeGen/X86/h-registers-0.ll new file mode 100644 index 00000000000..2777be9cc3e --- /dev/null +++ b/llvm/test/CodeGen/X86/h-registers-0.ll @@ -0,0 +1,48 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep {movzbl %\[abcd\]h,} | count 4 +; RUN: llvm-as < %s | llc -march=x86 > %t +; RUN: grep {incb %ah} %t | count 3 +; RUN: grep {movzbl %ah,} %t | count 3 + +; Use h registers. On x86-64, codegen doesn't support general allocation +; of h registers yet, due to x86 encoding complications. + +define void @bar64(i64 inreg %x, i8* inreg %p) nounwind { + %t0 = lshr i64 %x, 8 + %t1 = trunc i64 %t0 to i8 + %t2 = add i8 %t1, 1 + store i8 %t2, i8* %p + ret void +} + +define void @bar32(i32 inreg %x, i8* inreg %p) nounwind { + %t0 = lshr i32 %x, 8 + %t1 = trunc i32 %t0 to i8 + %t2 = add i8 %t1, 1 + store i8 %t2, i8* %p + ret void +} + +define void @bar16(i16 inreg %x, i8* inreg %p) nounwind { + %t0 = lshr i16 %x, 8 + %t1 = trunc i16 %t0 to i8 + %t2 = add i8 %t1, 1 + store i8 %t2, i8* %p + ret void +} + +define i64 @qux64(i64 inreg %x) nounwind { + %t0 = lshr i64 %x, 8 + %t1 = and i64 %t0, 255 + ret i64 %t1 +} + +define i32 @qux32(i32 inreg %x) nounwind { + %t0 = lshr i32 %x, 8 + %t1 = and i32 %t0, 255 + ret i32 %t1 +} + +define i16 @qux16(i16 inreg %x) nounwind { + %t0 = lshr i16 %x, 8 + ret i16 %t0 +} |