[llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/trunc-to-bool.ll
Reid Spencer
reid at x10sys.com
Sun Nov 26 17:06:22 PST 2006
Changes in directory llvm/test/Regression/CodeGen/X86:
trunc-to-bool.ll added (r1.1)
---
Log message:
For PR950: http://llvm.org/PR950 :
The long awaited CAST patch. This introduces 12 new instructions into LLVM
to replace the cast instruction. Corresponding changes throughout LLVM are
provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the
exception of 175.vpr which fails only on a slight floating point output
difference.
---
Diffs of the changes: (+32 -0)
trunc-to-bool.ll | 32 ++++++++++++++++++++++++++++++++
1 files changed, 32 insertions(+)
Index: llvm/test/Regression/CodeGen/X86/trunc-to-bool.ll
diff -c /dev/null llvm/test/Regression/CodeGen/X86/trunc-to-bool.ll:1.1
*** /dev/null Sun Nov 26 19:05:21 2006
--- llvm/test/Regression/CodeGen/X86/trunc-to-bool.ll Sun Nov 26 19:05:10 2006
***************
*** 0 ****
--- 1,32 ----
+ ; An integer truncation to bool should be done with an and instruction to make
+ ; sure only the LSBit survives. Test that this is the case both for a returned
+ ; value and as the operand of a branch.
+ ; RUN: llvm-as < %s | llc -march=x86 &&
+ ; RUN: llvm-as < %s | llc -march=x86 | grep '\(and\)\|\(test.*1\)' | wc -l | grep 3
+ bool %test1(int %X) {
+ %Y = trunc int %X to bool
+ ret bool %Y
+ }
+
+ bool %test2(int %val, int %mask) {
+ entry:
+ %mask = trunc int %mask to ubyte
+ %shifted = ashr int %val, ubyte %mask
+ %anded = and int %shifted, 1
+ %trunced = trunc int %anded to bool
+ br bool %trunced, label %ret_true, label %ret_false
+ ret_true:
+ ret bool true
+ ret_false:
+ ret bool false
+ }
+
+ int %test3(sbyte* %ptr) {
+ %val = load sbyte* %ptr
+ %tmp = trunc sbyte %val to bool ; %<bool> [#uses=1]
+ br bool %tmp, label %cond_true, label %cond_false
+ cond_true:
+ ret int 21
+ cond_false:
+ ret int 42
+ }
More information about the llvm-commits
mailing list