llvm.org GIT mirror llvm / release_34 test / CodeGen / X86 / trunc-to-bool.ll
release_34

Tree @release_34 (Download .tar.gz)

trunc-to-bool.ll @release_34

737ec51
3da59db
 
81fff07
eacb702
26b0000
737ec51
 
3da59db
b4dc023
81fff07
3da59db
2c755ba
3da59db
832254e
eacb702
737ec51
 
3da59db
737ec51
3da59db
737ec51
3da59db
b4dc023
6a7770b
3da59db
2c755ba
eacb702
737ec51
 
3da59db
eacb702
3da59db
eacb702
3da59db
b4dc023
2c755ba
e434f4a
2c755ba
737ec51
 
e434f4a
eacb702
e434f4a
eacb702
e434f4a
b4dc023
2c755ba
e434f4a
2c755ba
737ec51
 
e434f4a
eacb702
e434f4a
eacb702
e434f4a
b4dc023
bfd987b
; An integer truncation to i1 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: llc < %s -march=x86 | FileCheck %s

define zeroext i1 @test1(i32 %X)  nounwind {
    %Y = trunc i32 %X to i1
    ret i1 %Y
}
; CHECK-LABEL: test1:
; CHECK: andl $1, %eax

define i1 @test2(i32 %val, i32 %mask) nounwind {
entry:
    %shifted = ashr i32 %val, %mask
    %anded = and i32 %shifted, 1
    %trunced = trunc i32 %anded to i1
    br i1 %trunced, label %ret_true, label %ret_false
ret_true:
    ret i1 true
ret_false:
    ret i1 false
}
; CHECK-LABEL: test2:
; CHECK: btl

define i32 @test3(i8* %ptr) nounwind {
    %val = load i8* %ptr
    %tmp = trunc i8 %val to i1
    br i1 %tmp, label %cond_true, label %cond_false
cond_true:
    ret i32 21
cond_false:
    ret i32 42
}
; CHECK-LABEL: test3:
; CHECK: testb $1, (%eax)

define i32 @test4(i8* %ptr) nounwind {
    %tmp = ptrtoint i8* %ptr to i1
    br i1 %tmp, label %cond_true, label %cond_false
cond_true:
    ret i32 21
cond_false:
    ret i32 42
}
; CHECK-LABEL: test4:
; CHECK: testb $1, 4(%esp)

define i32 @test5(double %d) nounwind {
    %tmp = fptosi double %d to i1
    br i1 %tmp, label %cond_true, label %cond_false
cond_true:
    ret i32 21
cond_false:
    ret i32 42
}
; CHECK-LABEL: test5:
; CHECK: testb $1