1 ; RUN: opt -S -instsimplify < %s | FileCheck %s
2 target datalayout = "p:32:32"
4 define i1 @test1(i1 %V) {
7 %T = trunc i32 %Z to i1
9 ; CHECK-LABEL: define i1 @test1(
13 define i8* @test2(i8* %V) {
15 %BC1 = bitcast i8* %V to i32*
16 %BC2 = bitcast i32* %BC1 to i8*
18 ; CHECK-LABEL: define i8* @test2(
22 define i8* @test3(i8* %V) {
24 %BC = bitcast i8* %V to i8*
26 ; CHECK-LABEL: define i8* @test3(
31 ; CHECK-LABEL: @test4(
32 %alloca = alloca i32, align 4 ; alloca + 0
33 %gep = getelementptr inbounds i32, i32* %alloca, i32 1 ; alloca + 4
34 %bc = bitcast i32* %gep to [4 x i8]* ; alloca + 4
35 %pti = ptrtoint i32* %alloca to i32 ; alloca
36 %sub = sub i32 0, %pti ; -alloca
37 %add = getelementptr [4 x i8], [4 x i8]* %bc, i32 0, i32 %sub ; alloca + 4 - alloca == 4
38 %add_to_int = ptrtoint i8* %add to i32 ; 4
39 ret i32 %add_to_int ; 4
40 ; CHECK-NEXT: ret i32 4
44 ; CHECK-LABEL: @test5(
45 %alloca = alloca i32, align 4 ; alloca + 0
46 %gep = getelementptr inbounds i32, i32* %alloca, i32 1 ; alloca + 4
47 %bc = bitcast i32* %gep to [4 x i8]* ; alloca + 4
48 %pti = ptrtoint i32* %alloca to i32 ; alloca
49 %sub = xor i32 %pti, -1 ; ~alloca
50 %add = getelementptr [4 x i8], [4 x i8]* %bc, i32 0, i32 %sub ; alloca + 4 - alloca - 1 == 3
51 %add_to_int = ptrtoint i8* %add to i32 ; 4
52 ret i32 %add_to_int ; 4
53 ; CHECK-NEXT: ret i32 3