• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; This tests for various complex cast elimination cases instcombine should
2; handle.
3
4target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
5
6; RUN: opt < %s -instcombine -S | FileCheck %s
7
8define i1 @test1(i32 %X) {
9        %A = bitcast i32 %X to i32              ; <i32> [#uses=1]
10        ; Convert to setne int %X, 12
11        %c = icmp ne i32 %A, 12         ; <i1> [#uses=1]
12        ret i1 %c
13; CHECK-LABEL: @test1(
14; CHECK: %c = icmp ne i32 %X, 12
15; CHECK: ret i1 %c
16}
17
18define i1 @test2(i32 %X, i32 %Y) {
19        %A = bitcast i32 %X to i32              ; <i32> [#uses=1]
20        %B = bitcast i32 %Y to i32              ; <i32> [#uses=1]
21        ; Convert to setne int %X, %Y
22        %c = icmp ne i32 %A, %B         ; <i1> [#uses=1]
23        ret i1 %c
24; CHECK-LABEL: @test2(
25; CHECK: %c = icmp ne i32 %X, %Y
26; CHECK: ret i1 %c
27}
28
29define i32 @test4(i32 %A) {
30        %B = bitcast i32 %A to i32              ; <i32> [#uses=1]
31        %C = shl i32 %B, 2              ; <i32> [#uses=1]
32        %D = bitcast i32 %C to i32              ; <i32> [#uses=1]
33        ret i32 %D
34; CHECK-LABEL: @test4(
35; CHECK: %C = shl i32 %A, 2
36; CHECK: ret i32 %C
37}
38
39define i16 @test5(i16 %A) {
40        %B = sext i16 %A to i32         ; <i32> [#uses=1]
41        %C = and i32 %B, 15             ; <i32> [#uses=1]
42        %D = trunc i32 %C to i16                ; <i16> [#uses=1]
43        ret i16 %D
44; CHECK-LABEL: @test5(
45; CHECK: %C = and i16 %A, 15
46; CHECK: ret i16 %C
47}
48
49define i1 @test6(i1 %A) {
50        %B = zext i1 %A to i32          ; <i32> [#uses=1]
51        %C = icmp ne i32 %B, 0          ; <i1> [#uses=1]
52        ret i1 %C
53; CHECK-LABEL: @test6(
54; CHECK: ret i1 %A
55}
56
57define i1 @test6a(i1 %A) {
58        %B = zext i1 %A to i32          ; <i32> [#uses=1]
59        %C = icmp ne i32 %B, -1         ; <i1> [#uses=1]
60        ret i1 %C
61; CHECK-LABEL: @test6a(
62; CHECK: ret i1 true
63}
64
65define i1 @test7(i8* %A) {
66        %B = bitcast i8* %A to i32*             ; <i32*> [#uses=1]
67        %C = icmp eq i32* %B, null              ; <i1> [#uses=1]
68        ret i1 %C
69; CHECK-LABEL: @test7(
70; CHECK: %C = icmp eq i8* %A, null
71; CHECK: ret i1 %C
72}
73