llvm-6502/test/CodeGen/X86/trunc-to-bool.ll
Reid Spencer eacb7020ec For PR950:
Update the test suite to accommodate the change from signed integer types
to signless integer types. The changes were of only a few kinds:

1. Make sure llvm-upgrade is run on the source which does the bulk of the
   changes automatically.

2. Change things like "grep 'int'" to "grep 'i32'"

3. In several tests bitcasting caused the same name to be reused in the
   same type plane. These had to be manually fixed. The fix was (generally)
   to leave the bitcast and provide the instruction with a new name. This
   should not affect the semantics of the test. In a few cases, the
   bitcasts were known to be superfluous and irrelevant to the test case
   so they were removed.

4. One test case uses a bytecode file which needed to be updated to the
   latest bytecode format.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32789 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-31 06:02:00 +00:00

63 lines
1.4 KiB
LLVM

; 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\)' | \
; RUN: wc -l | grep 6
define bool @zext %test1(i32 %X) {
%Y = trunc i32 %X to bool
ret bool %Y
}
define bool %test2(i32 %val, i32 %mask) {
entry:
%mask = trunc i32 %mask to i8
%shifted = ashr i32 %val, i8 %mask
%anded = and i32 %shifted, 1
%trunced = trunc i32 %anded to bool
br bool %trunced, label %ret_true, label %ret_false
ret_true:
ret bool true
ret_false:
ret bool false
}
define i32 %test3(i8* %ptr) {
%val = load i8* %ptr
%tmp = trunc i8 %val to bool
br bool %tmp, label %cond_true, label %cond_false
cond_true:
ret i32 21
cond_false:
ret i32 42
}
define i32 %test4(i8* %ptr) {
%tmp = ptrtoint i8* %ptr to bool
br bool %tmp, label %cond_true, label %cond_false
cond_true:
ret i32 21
cond_false:
ret i32 42
}
define i32 %test5(float %f) {
%tmp = fptoui float %f to bool
br bool %tmp, label %cond_true, label %cond_false
cond_true:
ret i32 21
cond_false:
ret i32 42
}
define i32 %test6(double %d) {
%tmp = fptosi double %d to bool
br bool %tmp, label %cond_true, label %cond_false
cond_true:
ret i32 21
cond_false:
ret i32 42
}