[InstCombine] Signed saturation tests. NFC
[llvm-complete.git] / test / Transforms / InstSimplify / cast.ll
blob1ba3c76d02370ca4e8477b8d94d92e4c6e5991ab
1 ; RUN: opt -S -instsimplify < %s | FileCheck %s
2 target datalayout = "p:32:32"
4 define i1 @test1(i1 %V) {
5 entry:
6   %Z = zext i1 %V to i32
7   %T = trunc i32 %Z to i1
8   ret i1 %T
9 ; CHECK-LABEL: define i1 @test1(
10 ; CHECK: ret i1 %V
13 define i8* @test2(i8* %V) {
14 entry:
15   %BC1 = bitcast i8* %V to i32*
16   %BC2 = bitcast i32* %BC1 to i8*
17   ret i8* %BC2
18 ; CHECK-LABEL: define i8* @test2(
19 ; CHECK: ret i8* %V
22 define i8* @test3(i8* %V) {
23 entry:
24   %BC = bitcast i8* %V to i8*
25   ret i8* %BC
26 ; CHECK-LABEL: define i8* @test3(
27 ; CHECK: ret i8* %V
30 define i32 @test4() {
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
43 define i32 @test5() {
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