1; RUN: opt < %s -simplifycfg -instcombine -S | grep 0x7FF8000000000000 | count 12 2; RUN: opt < %s -simplifycfg -instcombine -S | grep "0\.0" | count 3 3; RUN: opt < %s -simplifycfg -instcombine -S | grep "3\.5" | count 1 4; 5 6; ModuleID = 'apf.c' 7target 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" 8target triple = "i386-apple-darwin9.6" 9@"\01LC" = internal constant [4 x i8] c"%f\0A\00" ; <[4 x i8]*> [#uses=1] 10 11define void @foo1() nounwind { 12entry: 13 %y = alloca float ; <float*> [#uses=2] 14 %x = alloca float ; <float*> [#uses=2] 15 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 16 store float 0x7FF0000000000000, float* %x, align 4 17 store float 0x7FF8000000000000, float* %y, align 4 18 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 19 %1 = fpext float %0 to double ; <double> [#uses=1] 20 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 21 %3 = fpext float %2 to double ; <double> [#uses=1] 22 %4 = frem double %3, %1 ; <double> [#uses=1] 23 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 24 br label %return 25 26return: ; preds = %entry 27 ret void 28} 29 30declare i32 @printf(i8*, ...) nounwind 31 32define void @foo2() nounwind { 33entry: 34 %y = alloca float ; <float*> [#uses=2] 35 %x = alloca float ; <float*> [#uses=2] 36 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 37 store float 0x7FF0000000000000, float* %x, align 4 38 store float 0.000000e+00, float* %y, align 4 39 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 40 %1 = fpext float %0 to double ; <double> [#uses=1] 41 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 42 %3 = fpext float %2 to double ; <double> [#uses=1] 43 %4 = frem double %3, %1 ; <double> [#uses=1] 44 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 45 br label %return 46 47return: ; preds = %entry 48 ret void 49} 50 51define void @foo3() nounwind { 52entry: 53 %y = alloca float ; <float*> [#uses=2] 54 %x = alloca float ; <float*> [#uses=2] 55 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 56 store float 0x7FF0000000000000, float* %x, align 4 57 store float 3.500000e+00, float* %y, align 4 58 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 59 %1 = fpext float %0 to double ; <double> [#uses=1] 60 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 61 %3 = fpext float %2 to double ; <double> [#uses=1] 62 %4 = frem double %3, %1 ; <double> [#uses=1] 63 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 64 br label %return 65 66return: ; preds = %entry 67 ret void 68} 69 70define void @foo4() nounwind { 71entry: 72 %y = alloca float ; <float*> [#uses=2] 73 %x = alloca float ; <float*> [#uses=2] 74 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 75 store float 0x7FF0000000000000, float* %x, align 4 76 store float 0x7FF0000000000000, float* %y, align 4 77 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 78 %1 = fpext float %0 to double ; <double> [#uses=1] 79 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 80 %3 = fpext float %2 to double ; <double> [#uses=1] 81 %4 = frem double %3, %1 ; <double> [#uses=1] 82 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 83 br label %return 84 85return: ; preds = %entry 86 ret void 87} 88 89define void @foo5() nounwind { 90entry: 91 %y = alloca float ; <float*> [#uses=2] 92 %x = alloca float ; <float*> [#uses=2] 93 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 94 store float 0x7FF8000000000000, float* %x, align 4 95 store float 0x7FF0000000000000, float* %y, align 4 96 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 97 %1 = fpext float %0 to double ; <double> [#uses=1] 98 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 99 %3 = fpext float %2 to double ; <double> [#uses=1] 100 %4 = frem double %3, %1 ; <double> [#uses=1] 101 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 102 br label %return 103 104return: ; preds = %entry 105 ret void 106} 107 108define void @foo6() nounwind { 109entry: 110 %y = alloca float ; <float*> [#uses=2] 111 %x = alloca float ; <float*> [#uses=2] 112 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 113 store float 0x7FF8000000000000, float* %x, align 4 114 store float 0.000000e+00, float* %y, align 4 115 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 116 %1 = fpext float %0 to double ; <double> [#uses=1] 117 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 118 %3 = fpext float %2 to double ; <double> [#uses=1] 119 %4 = frem double %3, %1 ; <double> [#uses=1] 120 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 121 br label %return 122 123return: ; preds = %entry 124 ret void 125} 126 127define void @foo7() nounwind { 128entry: 129 %y = alloca float ; <float*> [#uses=2] 130 %x = alloca float ; <float*> [#uses=2] 131 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 132 store float 0x7FF8000000000000, float* %x, align 4 133 store float 3.500000e+00, float* %y, align 4 134 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 135 %1 = fpext float %0 to double ; <double> [#uses=1] 136 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 137 %3 = fpext float %2 to double ; <double> [#uses=1] 138 %4 = frem double %3, %1 ; <double> [#uses=1] 139 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 140 br label %return 141 142return: ; preds = %entry 143 ret void 144} 145 146define void @foo8() nounwind { 147entry: 148 %y = alloca float ; <float*> [#uses=2] 149 %x = alloca float ; <float*> [#uses=2] 150 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 151 store float 0x7FF8000000000000, float* %x, align 4 152 store float 0x7FF8000000000000, float* %y, align 4 153 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 154 %1 = fpext float %0 to double ; <double> [#uses=1] 155 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 156 %3 = fpext float %2 to double ; <double> [#uses=1] 157 %4 = frem double %3, %1 ; <double> [#uses=1] 158 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 159 br label %return 160 161return: ; preds = %entry 162 ret void 163} 164 165define void @foo9() nounwind { 166entry: 167 %y = alloca float ; <float*> [#uses=2] 168 %x = alloca float ; <float*> [#uses=2] 169 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 170 store float 0.000000e+00, float* %x, align 4 171 store float 0x7FF8000000000000, float* %y, align 4 172 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 173 %1 = fpext float %0 to double ; <double> [#uses=1] 174 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 175 %3 = fpext float %2 to double ; <double> [#uses=1] 176 %4 = frem double %3, %1 ; <double> [#uses=1] 177 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 178 br label %return 179 180return: ; preds = %entry 181 ret void 182} 183 184define void @foo10() nounwind { 185entry: 186 %y = alloca float ; <float*> [#uses=2] 187 %x = alloca float ; <float*> [#uses=2] 188 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 189 store float 0.000000e+00, float* %x, align 4 190 store float 0x7FF0000000000000, float* %y, align 4 191 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 192 %1 = fpext float %0 to double ; <double> [#uses=1] 193 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 194 %3 = fpext float %2 to double ; <double> [#uses=1] 195 %4 = frem double %3, %1 ; <double> [#uses=1] 196 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 197 br label %return 198 199return: ; preds = %entry 200 ret void 201} 202 203define void @foo11() nounwind { 204entry: 205 %y = alloca float ; <float*> [#uses=2] 206 %x = alloca float ; <float*> [#uses=2] 207 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 208 store float 0.000000e+00, float* %x, align 4 209 store float 0.000000e+00, float* %y, align 4 210 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 211 %1 = fpext float %0 to double ; <double> [#uses=1] 212 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 213 %3 = fpext float %2 to double ; <double> [#uses=1] 214 %4 = frem double %3, %1 ; <double> [#uses=1] 215 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 216 br label %return 217 218return: ; preds = %entry 219 ret void 220} 221 222define void @foo12() nounwind { 223entry: 224 %y = alloca float ; <float*> [#uses=2] 225 %x = alloca float ; <float*> [#uses=2] 226 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 227 store float 0.000000e+00, float* %x, align 4 228 store float 3.500000e+00, float* %y, align 4 229 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 230 %1 = fpext float %0 to double ; <double> [#uses=1] 231 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 232 %3 = fpext float %2 to double ; <double> [#uses=1] 233 %4 = frem double %3, %1 ; <double> [#uses=1] 234 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 235 br label %return 236 237return: ; preds = %entry 238 ret void 239} 240 241define void @foo13() nounwind { 242entry: 243 %y = alloca float ; <float*> [#uses=2] 244 %x = alloca float ; <float*> [#uses=2] 245 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 246 store float 3.500000e+00, float* %x, align 4 247 store float 0x7FF8000000000000, float* %y, align 4 248 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 249 %1 = fpext float %0 to double ; <double> [#uses=1] 250 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 251 %3 = fpext float %2 to double ; <double> [#uses=1] 252 %4 = frem double %3, %1 ; <double> [#uses=1] 253 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 254 br label %return 255 256return: ; preds = %entry 257 ret void 258} 259 260define void @foo14() nounwind { 261entry: 262 %y = alloca float ; <float*> [#uses=2] 263 %x = alloca float ; <float*> [#uses=2] 264 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 265 store float 3.500000e+00, float* %x, align 4 266 store float 0x7FF0000000000000, float* %y, align 4 267 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 268 %1 = fpext float %0 to double ; <double> [#uses=1] 269 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 270 %3 = fpext float %2 to double ; <double> [#uses=1] 271 %4 = frem double %3, %1 ; <double> [#uses=1] 272 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 273 br label %return 274 275return: ; preds = %entry 276 ret void 277} 278 279define void @foo15() nounwind { 280entry: 281 %y = alloca float ; <float*> [#uses=2] 282 %x = alloca float ; <float*> [#uses=2] 283 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 284 store float 3.500000e+00, float* %x, align 4 285 store float 0.000000e+00, float* %y, align 4 286 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 287 %1 = fpext float %0 to double ; <double> [#uses=1] 288 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 289 %3 = fpext float %2 to double ; <double> [#uses=1] 290 %4 = frem double %3, %1 ; <double> [#uses=1] 291 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 292 br label %return 293 294return: ; preds = %entry 295 ret void 296} 297 298define void @foo16() nounwind { 299entry: 300 %y = alloca float ; <float*> [#uses=2] 301 %x = alloca float ; <float*> [#uses=2] 302 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 303 store float 3.500000e+00, float* %x, align 4 304 store float 3.500000e+00, float* %y, align 4 305 %0 = load float, float* %y, align 4 ; <float> [#uses=1] 306 %1 = fpext float %0 to double ; <double> [#uses=1] 307 %2 = load float, float* %x, align 4 ; <float> [#uses=1] 308 %3 = fpext float %2 to double ; <double> [#uses=1] 309 %4 = frem double %3, %1 ; <double> [#uses=1] 310 %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind ; <i32> [#uses=0] 311 br label %return 312 313return: ; preds = %entry 314 ret void 315} 316