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 + } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits