Home | History | Annotate | Download | only in InstCombine
      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'
      7 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"
      8 target triple = "i386-apple-darwin9.6"
      9 @"\01LC" = internal constant [4 x i8] c"%f\0A\00"		; <[4 x i8]*> [#uses=1]
     10 
     11 define void @foo1() nounwind {
     12 entry:
     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* %y, align 4		; <float> [#uses=1]
     19 	%1 = fpext float %0 to double		; <double> [#uses=1]
     20 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
     24 	br label %return
     25 
     26 return:		; preds = %entry
     27 	ret void
     28 }
     29 
     30 declare i32 @printf(i8*, ...) nounwind
     31 
     32 define void @foo2() nounwind {
     33 entry:
     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* %y, align 4		; <float> [#uses=1]
     40 	%1 = fpext float %0 to double		; <double> [#uses=1]
     41 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
     45 	br label %return
     46 
     47 return:		; preds = %entry
     48 	ret void
     49 }
     50 
     51 define void @foo3() nounwind {
     52 entry:
     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* %y, align 4		; <float> [#uses=1]
     59 	%1 = fpext float %0 to double		; <double> [#uses=1]
     60 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
     64 	br label %return
     65 
     66 return:		; preds = %entry
     67 	ret void
     68 }
     69 
     70 define void @foo4() nounwind {
     71 entry:
     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* %y, align 4		; <float> [#uses=1]
     78 	%1 = fpext float %0 to double		; <double> [#uses=1]
     79 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
     83 	br label %return
     84 
     85 return:		; preds = %entry
     86 	ret void
     87 }
     88 
     89 define void @foo5() nounwind {
     90 entry:
     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* %y, align 4		; <float> [#uses=1]
     97 	%1 = fpext float %0 to double		; <double> [#uses=1]
     98 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    102 	br label %return
    103 
    104 return:		; preds = %entry
    105 	ret void
    106 }
    107 
    108 define void @foo6() nounwind {
    109 entry:
    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* %y, align 4		; <float> [#uses=1]
    116 	%1 = fpext float %0 to double		; <double> [#uses=1]
    117 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    121 	br label %return
    122 
    123 return:		; preds = %entry
    124 	ret void
    125 }
    126 
    127 define void @foo7() nounwind {
    128 entry:
    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* %y, align 4		; <float> [#uses=1]
    135 	%1 = fpext float %0 to double		; <double> [#uses=1]
    136 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    140 	br label %return
    141 
    142 return:		; preds = %entry
    143 	ret void
    144 }
    145 
    146 define void @foo8() nounwind {
    147 entry:
    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* %y, align 4		; <float> [#uses=1]
    154 	%1 = fpext float %0 to double		; <double> [#uses=1]
    155 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    159 	br label %return
    160 
    161 return:		; preds = %entry
    162 	ret void
    163 }
    164 
    165 define void @foo9() nounwind {
    166 entry:
    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* %y, align 4		; <float> [#uses=1]
    173 	%1 = fpext float %0 to double		; <double> [#uses=1]
    174 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    178 	br label %return
    179 
    180 return:		; preds = %entry
    181 	ret void
    182 }
    183 
    184 define void @foo10() nounwind {
    185 entry:
    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* %y, align 4		; <float> [#uses=1]
    192 	%1 = fpext float %0 to double		; <double> [#uses=1]
    193 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    197 	br label %return
    198 
    199 return:		; preds = %entry
    200 	ret void
    201 }
    202 
    203 define void @foo11() nounwind {
    204 entry:
    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* %y, align 4		; <float> [#uses=1]
    211 	%1 = fpext float %0 to double		; <double> [#uses=1]
    212 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    216 	br label %return
    217 
    218 return:		; preds = %entry
    219 	ret void
    220 }
    221 
    222 define void @foo12() nounwind {
    223 entry:
    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* %y, align 4		; <float> [#uses=1]
    230 	%1 = fpext float %0 to double		; <double> [#uses=1]
    231 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    235 	br label %return
    236 
    237 return:		; preds = %entry
    238 	ret void
    239 }
    240 
    241 define void @foo13() nounwind {
    242 entry:
    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* %y, align 4		; <float> [#uses=1]
    249 	%1 = fpext float %0 to double		; <double> [#uses=1]
    250 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    254 	br label %return
    255 
    256 return:		; preds = %entry
    257 	ret void
    258 }
    259 
    260 define void @foo14() nounwind {
    261 entry:
    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* %y, align 4		; <float> [#uses=1]
    268 	%1 = fpext float %0 to double		; <double> [#uses=1]
    269 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    273 	br label %return
    274 
    275 return:		; preds = %entry
    276 	ret void
    277 }
    278 
    279 define void @foo15() nounwind {
    280 entry:
    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* %y, align 4		; <float> [#uses=1]
    287 	%1 = fpext float %0 to double		; <double> [#uses=1]
    288 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    292 	br label %return
    293 
    294 return:		; preds = %entry
    295 	ret void
    296 }
    297 
    298 define void @foo16() nounwind {
    299 entry:
    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* %y, align 4		; <float> [#uses=1]
    306 	%1 = fpext float %0 to double		; <double> [#uses=1]
    307 	%2 = load 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]* @"\01LC", i32 0, i32 0), double %4) nounwind		; <i32> [#uses=0]
    311 	br label %return
    312 
    313 return:		; preds = %entry
    314 	ret void
    315 }
    316