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