~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/CodeGen/Generic/overflow.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: llc < %s
 
2
; Verify codegen's don't crash on overflow intrinsics.
 
3
 
 
4
;; SADD
 
5
 
 
6
define zeroext i8 @sadd_i8(i8 signext %a, i8 signext %b) nounwind ssp {
 
7
entry:
 
8
  %sadd = tail call { i8, i1 } @llvm.sadd.with.overflow.i8(i8 %a, i8 %b)
 
9
  %cmp = extractvalue { i8, i1 } %sadd, 1
 
10
  %sadd.result = extractvalue { i8, i1 } %sadd, 0
 
11
  %X = select i1 %cmp, i8 %sadd.result, i8 42
 
12
  ret i8 %X
 
13
}
 
14
 
 
15
declare { i8, i1 } @llvm.sadd.with.overflow.i8(i8, i8) nounwind readnone
 
16
 
 
17
define zeroext i16 @sadd_i16(i16 signext %a, i16 signext %b) nounwind ssp {
 
18
entry:
 
19
  %sadd = tail call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %a, i16 %b)
 
20
  %cmp = extractvalue { i16, i1 } %sadd, 1
 
21
  %sadd.result = extractvalue { i16, i1 } %sadd, 0
 
22
  %X = select i1 %cmp, i16 %sadd.result, i16 42
 
23
  ret i16 %X
 
24
}
 
25
 
 
26
declare { i16, i1 } @llvm.sadd.with.overflow.i16(i16, i16) nounwind readnone
 
27
 
 
28
define zeroext i32 @sadd_i32(i32 signext %a, i32 signext %b) nounwind ssp {
 
29
entry:
 
30
  %sadd = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)
 
31
  %cmp = extractvalue { i32, i1 } %sadd, 1
 
32
  %sadd.result = extractvalue { i32, i1 } %sadd, 0
 
33
  %X = select i1 %cmp, i32 %sadd.result, i32 42
 
34
  ret i32 %X
 
35
}
 
36
 
 
37
declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) nounwind readnone
 
38
 
 
39
 
 
40
;; UADD
 
41
 
 
42
define zeroext i8 @uadd_i8(i8 signext %a, i8 signext %b) nounwind ssp {
 
43
entry:
 
44
  %uadd = tail call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %a, i8 %b)
 
45
  %cmp = extractvalue { i8, i1 } %uadd, 1
 
46
  %uadd.result = extractvalue { i8, i1 } %uadd, 0
 
47
  %X = select i1 %cmp, i8 %uadd.result, i8 42
 
48
  ret i8 %X
 
49
}
 
50
 
 
51
declare { i8, i1 } @llvm.uadd.with.overflow.i8(i8, i8) nounwind readnone
 
52
 
 
53
define zeroext i16 @uadd_i16(i16 signext %a, i16 signext %b) nounwind ssp {
 
54
entry:
 
55
  %uadd = tail call { i16, i1 } @llvm.uadd.with.overflow.i16(i16 %a, i16 %b)
 
56
  %cmp = extractvalue { i16, i1 } %uadd, 1
 
57
  %uadd.result = extractvalue { i16, i1 } %uadd, 0
 
58
  %X = select i1 %cmp, i16 %uadd.result, i16 42
 
59
  ret i16 %X
 
60
}
 
61
 
 
62
declare { i16, i1 } @llvm.uadd.with.overflow.i16(i16, i16) nounwind readnone
 
63
 
 
64
define zeroext i32 @uadd_i32(i32 signext %a, i32 signext %b) nounwind ssp {
 
65
entry:
 
66
  %uadd = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
 
67
  %cmp = extractvalue { i32, i1 } %uadd, 1
 
68
  %uadd.result = extractvalue { i32, i1 } %uadd, 0
 
69
  %X = select i1 %cmp, i32 %uadd.result, i32 42
 
70
  ret i32 %X
 
71
}
 
72
 
 
73
declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone
 
74
 
 
75
 
 
76
 
 
77
;; ssub
 
78
 
 
79
define zeroext i8 @ssub_i8(i8 signext %a, i8 signext %b) nounwind ssp {
 
80
entry:
 
81
  %ssub = tail call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 %a, i8 %b)
 
82
  %cmp = extractvalue { i8, i1 } %ssub, 1
 
83
  %ssub.result = extractvalue { i8, i1 } %ssub, 0
 
84
  %X = select i1 %cmp, i8 %ssub.result, i8 42
 
85
  ret i8 %X
 
86
}
 
87
 
 
88
declare { i8, i1 } @llvm.ssub.with.overflow.i8(i8, i8) nounwind readnone
 
89
 
 
90
define zeroext i16 @ssub_i16(i16 signext %a, i16 signext %b) nounwind ssp {
 
91
entry:
 
92
  %ssub = tail call { i16, i1 } @llvm.ssub.with.overflow.i16(i16 %a, i16 %b)
 
93
  %cmp = extractvalue { i16, i1 } %ssub, 1
 
94
  %ssub.result = extractvalue { i16, i1 } %ssub, 0
 
95
  %X = select i1 %cmp, i16 %ssub.result, i16 42
 
96
  ret i16 %X
 
97
}
 
98
 
 
99
declare { i16, i1 } @llvm.ssub.with.overflow.i16(i16, i16) nounwind readnone
 
100
 
 
101
define zeroext i32 @ssub_i32(i32 signext %a, i32 signext %b) nounwind ssp {
 
102
entry:
 
103
  %ssub = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)
 
104
  %cmp = extractvalue { i32, i1 } %ssub, 1
 
105
  %ssub.result = extractvalue { i32, i1 } %ssub, 0
 
106
  %X = select i1 %cmp, i32 %ssub.result, i32 42
 
107
  ret i32 %X
 
108
}
 
109
 
 
110
declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32) nounwind readnone
 
111
 
 
112
 
 
113
;; usub
 
114
 
 
115
define zeroext i8 @usub_i8(i8 signext %a, i8 signext %b) nounwind ssp {
 
116
entry:
 
117
  %usub = tail call { i8, i1 } @llvm.usub.with.overflow.i8(i8 %a, i8 %b)
 
118
  %cmp = extractvalue { i8, i1 } %usub, 1
 
119
  %usub.result = extractvalue { i8, i1 } %usub, 0
 
120
  %X = select i1 %cmp, i8 %usub.result, i8 42
 
121
  ret i8 %X
 
122
}
 
123
 
 
124
declare { i8, i1 } @llvm.usub.with.overflow.i8(i8, i8) nounwind readnone
 
125
 
 
126
define zeroext i16 @usub_i16(i16 signext %a, i16 signext %b) nounwind ssp {
 
127
entry:
 
128
  %usub = tail call { i16, i1 } @llvm.usub.with.overflow.i16(i16 %a, i16 %b)
 
129
  %cmp = extractvalue { i16, i1 } %usub, 1
 
130
  %usub.result = extractvalue { i16, i1 } %usub, 0
 
131
  %X = select i1 %cmp, i16 %usub.result, i16 42
 
132
  ret i16 %X
 
133
}
 
134
 
 
135
declare { i16, i1 } @llvm.usub.with.overflow.i16(i16, i16) nounwind readnone
 
136
 
 
137
define zeroext i32 @usub_i32(i32 signext %a, i32 signext %b) nounwind ssp {
 
138
entry:
 
139
  %usub = tail call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %a, i32 %b)
 
140
  %cmp = extractvalue { i32, i1 } %usub, 1
 
141
  %usub.result = extractvalue { i32, i1 } %usub, 0
 
142
  %X = select i1 %cmp, i32 %usub.result, i32 42
 
143
  ret i32 %X
 
144
}
 
145
 
 
146
declare { i32, i1 } @llvm.usub.with.overflow.i32(i32, i32) nounwind readnone
 
147
 
 
148
 
 
149
 
 
150
;; smul
 
151
 
 
152
define zeroext i8 @smul_i8(i8 signext %a, i8 signext %b) nounwind ssp {
 
153
entry:
 
154
  %smul = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %a, i8 %b)
 
155
  %cmp = extractvalue { i8, i1 } %smul, 1
 
156
  %smul.result = extractvalue { i8, i1 } %smul, 0
 
157
  %X = select i1 %cmp, i8 %smul.result, i8 42
 
158
  ret i8 %X
 
159
}
 
160
 
 
161
declare { i8, i1 } @llvm.smul.with.overflow.i8(i8, i8) nounwind readnone
 
162
 
 
163
define zeroext i16 @smul_i16(i16 signext %a, i16 signext %b) nounwind ssp {
 
164
entry:
 
165
  %smul = tail call { i16, i1 } @llvm.smul.with.overflow.i16(i16 %a, i16 %b)
 
166
  %cmp = extractvalue { i16, i1 } %smul, 1
 
167
  %smul.result = extractvalue { i16, i1 } %smul, 0
 
168
  %X = select i1 %cmp, i16 %smul.result, i16 42
 
169
  ret i16 %X
 
170
}
 
171
 
 
172
declare { i16, i1 } @llvm.smul.with.overflow.i16(i16, i16) nounwind readnone
 
173
 
 
174
define zeroext i32 @smul_i32(i32 signext %a, i32 signext %b) nounwind ssp {
 
175
entry:
 
176
  %smul = tail call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %a, i32 %b)
 
177
  %cmp = extractvalue { i32, i1 } %smul, 1
 
178
  %smul.result = extractvalue { i32, i1 } %smul, 0
 
179
  %X = select i1 %cmp, i32 %smul.result, i32 42
 
180
  ret i32 %X
 
181
}
 
182
 
 
183
declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone
 
184
 
 
185
 
 
186
;; umul
 
187
 
 
188
define zeroext i8 @umul_i8(i8 signext %a, i8 signext %b) nounwind ssp {
 
189
entry:
 
190
  %umul = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %a, i8 %b)
 
191
  %cmp = extractvalue { i8, i1 } %umul, 1
 
192
  %umul.result = extractvalue { i8, i1 } %umul, 0
 
193
  %X = select i1 %cmp, i8 %umul.result, i8 42
 
194
  ret i8 %X
 
195
}
 
196
 
 
197
declare { i8, i1 } @llvm.umul.with.overflow.i8(i8, i8) nounwind readnone
 
198
 
 
199
define zeroext i16 @umul_i16(i16 signext %a, i16 signext %b) nounwind ssp {
 
200
entry:
 
201
  %umul = tail call { i16, i1 } @llvm.umul.with.overflow.i16(i16 %a, i16 %b)
 
202
  %cmp = extractvalue { i16, i1 } %umul, 1
 
203
  %umul.result = extractvalue { i16, i1 } %umul, 0
 
204
  %X = select i1 %cmp, i16 %umul.result, i16 42
 
205
  ret i16 %X
 
206
}
 
207
 
 
208
declare { i16, i1 } @llvm.umul.with.overflow.i16(i16, i16) nounwind readnone
 
209
 
 
210
define zeroext i32 @umul_i32(i32 signext %a, i32 signext %b) nounwind ssp {
 
211
entry:
 
212
  %umul = tail call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %a, i32 %b)
 
213
  %cmp = extractvalue { i32, i1 } %umul, 1
 
214
  %umul.result = extractvalue { i32, i1 } %umul, 0
 
215
  %X = select i1 %cmp, i32 %umul.result, i32 42
 
216
  ret i32 %X
 
217
}
 
218
 
 
219
declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone
 
220