2
; RUNX: opt < %s -std-compile-opts | llc > %t
3
; RUNX: grep 2147027116 %t | count 3
4
; RUNX: grep 2147228864 %t | count 3
5
; RUNX: grep 2146502828 %t | count 3
6
; RUNX: grep 2143034560 %t | count 3
8
; Compile time conversions of NaNs.
10
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
11
target triple = "i686-apple-darwin8"
12
%struct..0anon = type { float }
13
%struct..1anon = type { double }
14
@fnan = constant [3 x i32] [ i32 2143831397, i32 2143831396, i32 2143831398 ] ; <[3 x i32]*> [#uses=1]
15
@dnan = constant [3 x i64] [ i64 9223235251041752696, i64 9223235251041752697, i64 9223235250773317239 ], align 8 ; <[3 x i64]*> [#uses=1]
16
@fsnan = constant [3 x i32] [ i32 2139637093, i32 2139637092, i32 2139637094 ] ; <[3 x i32]*> [#uses=1]
17
@dsnan = constant [3 x i64] [ i64 9220983451228067448, i64 9220983451228067449, i64 9220983450959631991 ], align 8 ; <[3 x i64]*> [#uses=1]
18
@.str = internal constant [10 x i8] c"%08x%08x\0A\00" ; <[10 x i8]*> [#uses=2]
19
@.str1 = internal constant [6 x i8] c"%08x\0A\00" ; <[6 x i8]*> [#uses=2]
21
@var = external global i32
25
%retval = alloca i32, align 4 ; <i32*> [#uses=1]
26
%i = alloca i32, align 4 ; <i32*> [#uses=20]
27
%uf = alloca %struct..0anon, align 4 ; <%struct..0anon*> [#uses=8]
28
%ud = alloca %struct..1anon, align 8 ; <%struct..1anon*> [#uses=10]
29
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
30
store i32 0, i32* %i, align 4
34
%tmp = load i32* %i, align 4 ; <i32> [#uses=1]
35
%tmp1 = getelementptr [3 x i32]* @fnan, i32 0, i32 %tmp ; <i32*> [#uses=1]
36
%tmp2 = load i32* %tmp1, align 4 ; <i32> [#uses=1]
37
%tmp3 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
38
%tmp34 = bitcast float* %tmp3 to i32* ; <i32*> [#uses=1]
39
store i32 %tmp2, i32* %tmp34, align 4
40
%tmp5 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
41
%tmp6 = load float* %tmp5, align 4 ; <float> [#uses=1]
42
%tmp67 = fpext float %tmp6 to double ; <double> [#uses=1]
43
%tmp8 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
44
store double %tmp67, double* %tmp8, align 8
45
%tmp9 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
46
%tmp910 = bitcast double* %tmp9 to i64* ; <i64*> [#uses=1]
47
%tmp11 = load i64* %tmp910, align 8 ; <i64> [#uses=1]
48
%tmp1112 = trunc i64 %tmp11 to i32 ; <i32> [#uses=1]
49
%tmp13 = and i32 %tmp1112, -1 ; <i32> [#uses=1]
50
%tmp14 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
51
%tmp1415 = bitcast double* %tmp14 to i64* ; <i64*> [#uses=1]
52
%tmp16 = load i64* %tmp1415, align 8 ; <i64> [#uses=1]
53
%.cast = zext i32 32 to i64 ; <i64> [#uses=1]
54
%tmp17 = ashr i64 %tmp16, %.cast ; <i64> [#uses=1]
55
%tmp1718 = trunc i64 %tmp17 to i32 ; <i32> [#uses=1]
56
%tmp19 = getelementptr [10 x i8]* @.str, i32 0, i32 0 ; <i8*> [#uses=1]
57
volatile store i32 %tmp1718, i32* @var
58
volatile store i32 %tmp13, i32* @var
59
%tmp21 = load i32* %i, align 4 ; <i32> [#uses=1]
60
%tmp22 = add i32 %tmp21, 1 ; <i32> [#uses=1]
61
store i32 %tmp22, i32* %i, align 4
64
bb23: ; preds = %bb, %entry
65
%tmp24 = load i32* %i, align 4 ; <i32> [#uses=1]
66
%tmp25 = icmp sle i32 %tmp24, 2 ; <i1> [#uses=1]
67
%tmp2526 = zext i1 %tmp25 to i8 ; <i8> [#uses=1]
68
%toBool = icmp ne i8 %tmp2526, 0 ; <i1> [#uses=1]
69
br i1 %toBool, label %bb, label %bb27
72
store i32 0, i32* %i, align 4
76
%tmp29 = load i32* %i, align 4 ; <i32> [#uses=1]
77
%tmp30 = getelementptr [3 x i64]* @dnan, i32 0, i32 %tmp29 ; <i64*> [#uses=1]
78
%tmp31 = load i64* %tmp30, align 8 ; <i64> [#uses=1]
79
%tmp32 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
80
%tmp3233 = bitcast double* %tmp32 to i64* ; <i64*> [#uses=1]
81
store i64 %tmp31, i64* %tmp3233, align 8
82
%tmp35 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
83
%tmp36 = load double* %tmp35, align 8 ; <double> [#uses=1]
84
%tmp3637 = fptrunc double %tmp36 to float ; <float> [#uses=1]
85
%tmp38 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
86
store float %tmp3637, float* %tmp38, align 4
87
%tmp39 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
88
%tmp3940 = bitcast float* %tmp39 to i32* ; <i32*> [#uses=1]
89
%tmp41 = load i32* %tmp3940, align 4 ; <i32> [#uses=1]
90
%tmp42 = getelementptr [6 x i8]* @.str1, i32 0, i32 0 ; <i8*> [#uses=1]
91
volatile store i32 %tmp41, i32* @var
92
%tmp44 = load i32* %i, align 4 ; <i32> [#uses=1]
93
%tmp45 = add i32 %tmp44, 1 ; <i32> [#uses=1]
94
store i32 %tmp45, i32* %i, align 4
97
bb46: ; preds = %bb28, %bb27
98
%tmp47 = load i32* %i, align 4 ; <i32> [#uses=1]
99
%tmp48 = icmp sle i32 %tmp47, 2 ; <i1> [#uses=1]
100
%tmp4849 = zext i1 %tmp48 to i8 ; <i8> [#uses=1]
101
%toBool50 = icmp ne i8 %tmp4849, 0 ; <i1> [#uses=1]
102
br i1 %toBool50, label %bb28, label %bb51
104
bb51: ; preds = %bb46
105
store i32 0, i32* %i, align 4
108
bb52: ; preds = %bb78
109
%tmp53 = load i32* %i, align 4 ; <i32> [#uses=1]
110
%tmp54 = getelementptr [3 x i32]* @fsnan, i32 0, i32 %tmp53 ; <i32*> [#uses=1]
111
%tmp55 = load i32* %tmp54, align 4 ; <i32> [#uses=1]
112
%tmp56 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
113
%tmp5657 = bitcast float* %tmp56 to i32* ; <i32*> [#uses=1]
114
store i32 %tmp55, i32* %tmp5657, align 4
115
%tmp58 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
116
%tmp59 = load float* %tmp58, align 4 ; <float> [#uses=1]
117
%tmp5960 = fpext float %tmp59 to double ; <double> [#uses=1]
118
%tmp61 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
119
store double %tmp5960, double* %tmp61, align 8
120
%tmp62 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
121
%tmp6263 = bitcast double* %tmp62 to i64* ; <i64*> [#uses=1]
122
%tmp64 = load i64* %tmp6263, align 8 ; <i64> [#uses=1]
123
%tmp6465 = trunc i64 %tmp64 to i32 ; <i32> [#uses=1]
124
%tmp66 = and i32 %tmp6465, -1 ; <i32> [#uses=1]
125
%tmp68 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
126
%tmp6869 = bitcast double* %tmp68 to i64* ; <i64*> [#uses=1]
127
%tmp70 = load i64* %tmp6869, align 8 ; <i64> [#uses=1]
128
%.cast71 = zext i32 32 to i64 ; <i64> [#uses=1]
129
%tmp72 = ashr i64 %tmp70, %.cast71 ; <i64> [#uses=1]
130
%tmp7273 = trunc i64 %tmp72 to i32 ; <i32> [#uses=1]
131
%tmp74 = getelementptr [10 x i8]* @.str, i32 0, i32 0 ; <i8*> [#uses=1]
132
volatile store i32 %tmp7273, i32* @var
133
volatile store i32 %tmp66, i32* @var
134
%tmp76 = load i32* %i, align 4 ; <i32> [#uses=1]
135
%tmp77 = add i32 %tmp76, 1 ; <i32> [#uses=1]
136
store i32 %tmp77, i32* %i, align 4
139
bb78: ; preds = %bb52, %bb51
140
%tmp79 = load i32* %i, align 4 ; <i32> [#uses=1]
141
%tmp80 = icmp sle i32 %tmp79, 2 ; <i1> [#uses=1]
142
%tmp8081 = zext i1 %tmp80 to i8 ; <i8> [#uses=1]
143
%toBool82 = icmp ne i8 %tmp8081, 0 ; <i1> [#uses=1]
144
br i1 %toBool82, label %bb52, label %bb83
146
bb83: ; preds = %bb78
147
store i32 0, i32* %i, align 4
150
bb84: ; preds = %bb101
151
%tmp85 = load i32* %i, align 4 ; <i32> [#uses=1]
152
%tmp86 = getelementptr [3 x i64]* @dsnan, i32 0, i32 %tmp85 ; <i64*> [#uses=1]
153
%tmp87 = load i64* %tmp86, align 8 ; <i64> [#uses=1]
154
%tmp88 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
155
%tmp8889 = bitcast double* %tmp88 to i64* ; <i64*> [#uses=1]
156
store i64 %tmp87, i64* %tmp8889, align 8
157
%tmp90 = getelementptr %struct..1anon* %ud, i32 0, i32 0 ; <double*> [#uses=1]
158
%tmp91 = load double* %tmp90, align 8 ; <double> [#uses=1]
159
%tmp9192 = fptrunc double %tmp91 to float ; <float> [#uses=1]
160
%tmp93 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
161
store float %tmp9192, float* %tmp93, align 4
162
%tmp94 = getelementptr %struct..0anon* %uf, i32 0, i32 0 ; <float*> [#uses=1]
163
%tmp9495 = bitcast float* %tmp94 to i32* ; <i32*> [#uses=1]
164
%tmp96 = load i32* %tmp9495, align 4 ; <i32> [#uses=1]
165
%tmp97 = getelementptr [6 x i8]* @.str1, i32 0, i32 0 ; <i8*> [#uses=1]
166
volatile store i32 %tmp96, i32* @var
167
%tmp99 = load i32* %i, align 4 ; <i32> [#uses=1]
168
%tmp100 = add i32 %tmp99, 1 ; <i32> [#uses=1]
169
store i32 %tmp100, i32* %i, align 4
172
bb101: ; preds = %bb84, %bb83
173
%tmp102 = load i32* %i, align 4 ; <i32> [#uses=1]
174
%tmp103 = icmp sle i32 %tmp102, 2 ; <i1> [#uses=1]
175
%tmp103104 = zext i1 %tmp103 to i8 ; <i8> [#uses=1]
176
%toBool105 = icmp ne i8 %tmp103104, 0 ; <i1> [#uses=1]
177
br i1 %toBool105, label %bb84, label %bb106
179
bb106: ; preds = %bb101
182
return: ; preds = %bb106
183
%retval107 = load i32* %retval ; <i32> [#uses=1]