trunc_select.ll
3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -aggressive-instcombine -S | FileCheck %s
; RUN: opt < %s -passes=aggressive-instcombine -S | FileCheck %s
target datalayout = "e-m:m-p1:64:64:64-p:32:32:32-n8:16:32"
define dso_local i16 @select_i16(i16 %a, i16 %b, i1 %cond) {
; CHECK-LABEL: @select_i16(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[A:%.*]], i16 [[B:%.*]]
; CHECK-NEXT: ret i16 [[SEL]]
;
entry:
%conv0 = sext i16 %a to i32
%conv1 = sext i16 %b to i32
%sel = select i1 %cond, i32 %conv0, i32 %conv1
%conv4 = trunc i32 %sel to i16
ret i16 %conv4
}
define dso_local i8 @select_i8(i8 %a, i8 %b, i1 %cond) {
; CHECK-LABEL: @select_i8(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i8 [[A:%.*]], i8 [[B:%.*]]
; CHECK-NEXT: ret i8 [[SEL]]
;
entry:
%conv0 = sext i8 %a to i32
%conv1 = sext i8 %b to i32
%sel = select i1 %cond, i32 %conv0, i32 %conv1
%conv4 = trunc i32 %sel to i8
ret i8 %conv4
}
define dso_local i16 @select_i8Ops_trunc_i16(i8 %a, i8 %b, i1 %cond) {
; CHECK-LABEL: @select_i8Ops_trunc_i16(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CONV0:%.*]] = sext i8 [[A:%.*]] to i16
; CHECK-NEXT: [[CONV1:%.*]] = sext i8 [[B:%.*]] to i16
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[CONV0]], i16 [[CONV1]]
; CHECK-NEXT: ret i16 [[SEL]]
;
entry:
%conv0 = sext i8 %a to i32
%conv1 = sext i8 %b to i32
%sel = select i1 %cond, i32 %conv0, i32 %conv1
%conv4 = trunc i32 %sel to i16
ret i16 %conv4
}
;
define dso_local i16 @select_i16_const(i16 %a, i1 %cond) {
; CHECK-LABEL: @select_i16_const(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 109, i16 [[A:%.*]]
; CHECK-NEXT: ret i16 [[SEL]]
;
entry:
%conv = sext i16 %a to i32
%sel = select i1 %cond, i32 109, i32 %conv
%conv4 = trunc i32 %sel to i16
ret i16 %conv4
}
; 3080196 = 0x2f0004
define dso_local i16 @select_i16_bigConst(i16 %a, i1 %cond) {
; CHECK-LABEL: @select_i16_bigConst(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 4, i16 [[A:%.*]]
; CHECK-NEXT: ret i16 [[SEL]]
;
entry:
%conv = sext i16 %a to i32
%sel = select i1 %cond, i32 3080196, i32 %conv
%conv4 = trunc i32 %sel to i16
ret i16 %conv4
}
define dso_local i8 @select_i8_const(i8 %a, i1 %cond) {
; CHECK-LABEL: @select_i8_const(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i8 109, i8 [[A:%.*]]
; CHECK-NEXT: ret i8 [[SEL]]
;
entry:
%conv = sext i8 %a to i32
%sel = select i1 %cond, i32 109, i32 %conv
%conv4 = trunc i32 %sel to i8
ret i8 %conv4
}
; 20228 = 0x4f02
define dso_local i8 @select_i8_bigConst(i8 %a, i1 %cond) {
; CHECK-LABEL: @select_i8_bigConst(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i8 4, i8 [[A:%.*]]
; CHECK-NEXT: ret i8 [[SEL]]
;
entry:
%conv = sext i8 %a to i32
%sel = select i1 %cond, i32 20228, i32 %conv
%conv4 = trunc i32 %sel to i8
ret i8 %conv4
}
define dso_local i16 @select_sext(i8 %a, i1 %cond) {
; CHECK-LABEL: @select_sext(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[A:%.*]] to i16
; CHECK-NEXT: [[SUB:%.*]] = sub i16 0, [[CONV]]
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[SUB]], i16 [[CONV]]
; CHECK-NEXT: ret i16 [[SEL]]
;
entry:
%conv = sext i8 %a to i32
%sub = sub nsw i32 0, %conv
%sel = select i1 %cond, i32 %sub, i32 %conv
%conv4 = trunc i32 %sel to i16
ret i16 %conv4
}
define dso_local i16 @select_zext(i8 %a, i1 %cond) {
; CHECK-LABEL: @select_zext(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i16
; CHECK-NEXT: [[SUB:%.*]] = sub i16 0, [[CONV]]
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[SUB]], i16 [[CONV]]
; CHECK-NEXT: ret i16 [[SEL]]
;
entry:
%conv = zext i8 %a to i32
%sub = sub nsw i32 0, %conv
%sel = select i1 %cond, i32 %sub, i32 %conv
%conv4 = trunc i32 %sel to i16
ret i16 %conv4
}