1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2 ; RUN: opt < %s -instcombine -S | FileCheck %s 3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 4 5 define double @test_sqrt_sd_0(double %a) { 6 ; CHECK-LABEL: @test_sqrt_sd_0( 7 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 8 ; CHECK-NEXT: [[TMP2:%.*]] = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> [[TMP1]]) 9 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP2]], i32 0 10 ; CHECK-NEXT: ret double [[TMP3]] 11 ; 12 %1 = insertelement <2 x double> undef, double %a, i32 0 13 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 14 %3 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2) 15 %4 = extractelement <2 x double> %3, i32 0 16 ret double %4 17 } 18 19 define double @test_sqrt_sd_1(double %a) { 20 ; CHECK-LABEL: @test_sqrt_sd_1( 21 ; CHECK-NEXT: ret double 1.000000e+00 22 ; 23 %1 = insertelement <2 x double> undef, double %a, i32 0 24 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 25 %3 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2) 26 %4 = extractelement <2 x double> %3, i32 1 27 ret double %4 28 } 29 30 define <2 x double> @test_add_sd(<2 x double> %a, <2 x double> %b) { 31 ; CHECK-LABEL: @test_add_sd( 32 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %a, <2 x double> %b) 33 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 34 ; 35 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 36 %2 = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %a, <2 x double> %1) 37 ret <2 x double> %2 38 } 39 40 define double @test_add_sd_0(double %a, double %b) { 41 ; CHECK-LABEL: @test_add_sd_0( 42 ; CHECK-NEXT: [[TMP1:%.*]] = fadd double %a, %b 43 ; CHECK-NEXT: ret double [[TMP1]] 44 ; 45 %1 = insertelement <2 x double> undef, double %a, i32 0 46 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 47 %3 = insertelement <2 x double> undef, double %b, i32 0 48 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 49 %5 = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %2, <2 x double> %4) 50 %6 = extractelement <2 x double> %5, i32 0 51 ret double %6 52 } 53 54 define double @test_add_sd_1(double %a, double %b) { 55 ; CHECK-LABEL: @test_add_sd_1( 56 ; CHECK-NEXT: ret double 1.000000e+00 57 ; 58 %1 = insertelement <2 x double> undef, double %a, i32 0 59 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 60 %3 = insertelement <2 x double> undef, double %b, i32 0 61 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 62 %5 = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %2, <2 x double> %4) 63 %6 = extractelement <2 x double> %5, i32 1 64 ret double %6 65 } 66 67 define <2 x double> @test_sub_sd(<2 x double> %a, <2 x double> %b) { 68 ; CHECK-LABEL: @test_sub_sd( 69 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %a, <2 x double> %b) 70 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 71 ; 72 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 73 %2 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %a, <2 x double> %1) 74 ret <2 x double> %2 75 } 76 77 define double @test_sub_sd_0(double %a, double %b) { 78 ; CHECK-LABEL: @test_sub_sd_0( 79 ; CHECK-NEXT: [[TMP1:%.*]] = fsub double %a, %b 80 ; CHECK-NEXT: ret double [[TMP1]] 81 ; 82 %1 = insertelement <2 x double> undef, double %a, i32 0 83 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 84 %3 = insertelement <2 x double> undef, double %b, i32 0 85 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 86 %5 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %2, <2 x double> %4) 87 %6 = extractelement <2 x double> %5, i32 0 88 ret double %6 89 } 90 91 define double @test_sub_sd_1(double %a, double %b) { 92 ; CHECK-LABEL: @test_sub_sd_1( 93 ; CHECK-NEXT: ret double 1.000000e+00 94 ; 95 %1 = insertelement <2 x double> undef, double %a, i32 0 96 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 97 %3 = insertelement <2 x double> undef, double %b, i32 0 98 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 99 %5 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %2, <2 x double> %4) 100 %6 = extractelement <2 x double> %5, i32 1 101 ret double %6 102 } 103 104 define <2 x double> @test_mul_sd(<2 x double> %a, <2 x double> %b) { 105 ; CHECK-LABEL: @test_mul_sd( 106 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %a, <2 x double> %b) 107 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 108 ; 109 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 110 %2 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %a, <2 x double> %1) 111 ret <2 x double> %2 112 } 113 114 define double @test_mul_sd_0(double %a, double %b) { 115 ; CHECK-LABEL: @test_mul_sd_0( 116 ; CHECK-NEXT: [[TMP1:%.*]] = fmul double %a, %b 117 ; CHECK-NEXT: ret double [[TMP1]] 118 ; 119 %1 = insertelement <2 x double> undef, double %a, i32 0 120 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 121 %3 = insertelement <2 x double> undef, double %b, i32 0 122 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 123 %5 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %2, <2 x double> %4) 124 %6 = extractelement <2 x double> %5, i32 0 125 ret double %6 126 } 127 128 define double @test_mul_sd_1(double %a, double %b) { 129 ; CHECK-LABEL: @test_mul_sd_1( 130 ; CHECK-NEXT: ret double 1.000000e+00 131 ; 132 %1 = insertelement <2 x double> undef, double %a, i32 0 133 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 134 %3 = insertelement <2 x double> undef, double %b, i32 0 135 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 136 %5 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %2, <2 x double> %4) 137 %6 = extractelement <2 x double> %5, i32 1 138 ret double %6 139 } 140 141 define <2 x double> @test_div_sd(<2 x double> %a, <2 x double> %b) { 142 ; CHECK-LABEL: @test_div_sd( 143 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %a, <2 x double> %b) 144 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 145 ; 146 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 147 %2 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %a, <2 x double> %1) 148 ret <2 x double> %2 149 } 150 151 define double @test_div_sd_0(double %a, double %b) { 152 ; CHECK-LABEL: @test_div_sd_0( 153 ; CHECK-NEXT: [[TMP1:%.*]] = fdiv double %a, %b 154 ; CHECK-NEXT: ret double [[TMP1]] 155 ; 156 %1 = insertelement <2 x double> undef, double %a, i32 0 157 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 158 %3 = insertelement <2 x double> undef, double %b, i32 0 159 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 160 %5 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %2, <2 x double> %4) 161 %6 = extractelement <2 x double> %5, i32 0 162 ret double %6 163 } 164 165 define double @test_div_sd_1(double %a, double %b) { 166 ; CHECK-LABEL: @test_div_sd_1( 167 ; CHECK-NEXT: ret double 1.000000e+00 168 ; 169 %1 = insertelement <2 x double> undef, double %a, i32 0 170 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 171 %3 = insertelement <2 x double> undef, double %b, i32 0 172 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 173 %5 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %2, <2 x double> %4) 174 %6 = extractelement <2 x double> %5, i32 1 175 ret double %6 176 } 177 178 define <2 x double> @test_min_sd(<2 x double> %a, <2 x double> %b) { 179 ; CHECK-LABEL: @test_min_sd( 180 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a, <2 x double> %b) 181 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 182 ; 183 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 184 %2 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a, <2 x double> %1) 185 ret <2 x double> %2 186 } 187 188 define double @test_min_sd_0(double %a, double %b) { 189 ; CHECK-LABEL: @test_min_sd_0( 190 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 191 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 192 ; CHECK-NEXT: [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 193 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i32 0 194 ; CHECK-NEXT: ret double [[TMP4]] 195 ; 196 %1 = insertelement <2 x double> undef, double %a, i32 0 197 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 198 %3 = insertelement <2 x double> undef, double %b, i32 0 199 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 200 %5 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %2, <2 x double> %4) 201 %6 = extractelement <2 x double> %5, i32 0 202 ret double %6 203 } 204 205 define double @test_min_sd_1(double %a, double %b) { 206 ; CHECK-LABEL: @test_min_sd_1( 207 ; CHECK-NEXT: ret double 1.000000e+00 208 ; 209 %1 = insertelement <2 x double> undef, double %a, i32 0 210 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 211 %3 = insertelement <2 x double> undef, double %b, i32 0 212 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 213 %5 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %2, <2 x double> %4) 214 %6 = extractelement <2 x double> %5, i32 1 215 ret double %6 216 } 217 218 define <2 x double> @test_max_sd(<2 x double> %a, <2 x double> %b) { 219 ; CHECK-LABEL: @test_max_sd( 220 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a, <2 x double> %b) 221 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 222 ; 223 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 224 %2 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a, <2 x double> %1) 225 ret <2 x double> %2 226 } 227 228 define double @test_max_sd_0(double %a, double %b) { 229 ; CHECK-LABEL: @test_max_sd_0( 230 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 231 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 232 ; CHECK-NEXT: [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 233 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i32 0 234 ; CHECK-NEXT: ret double [[TMP4]] 235 ; 236 %1 = insertelement <2 x double> undef, double %a, i32 0 237 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 238 %3 = insertelement <2 x double> undef, double %b, i32 0 239 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 240 %5 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %2, <2 x double> %4) 241 %6 = extractelement <2 x double> %5, i32 0 242 ret double %6 243 } 244 245 define double @test_max_sd_1(double %a, double %b) { 246 ; CHECK-LABEL: @test_max_sd_1( 247 ; CHECK-NEXT: ret double 1.000000e+00 248 ; 249 %1 = insertelement <2 x double> undef, double %a, i32 0 250 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 251 %3 = insertelement <2 x double> undef, double %b, i32 0 252 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 253 %5 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %2, <2 x double> %4) 254 %6 = extractelement <2 x double> %5, i32 1 255 ret double %6 256 } 257 258 define <2 x double> @test_cmp_sd(<2 x double> %a, <2 x double> %b) { 259 ; CHECK-LABEL: @test_cmp_sd( 260 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a, <2 x double> %b, i8 0) 261 ; CHECK-NEXT: ret <2 x double> [[TMP1]] 262 ; 263 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1 264 %2 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a, <2 x double> %1, i8 0) 265 ret <2 x double> %2 266 } 267 268 define double @test_cmp_sd_0(double %a, double %b) { 269 ; CHECK-LABEL: @test_cmp_sd_0( 270 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 271 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 272 ; CHECK-NEXT: [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]], i8 0) 273 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i32 0 274 ; CHECK-NEXT: ret double [[TMP4]] 275 ; 276 %1 = insertelement <2 x double> undef, double %a, i32 0 277 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 278 %3 = insertelement <2 x double> undef, double %b, i32 0 279 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 280 %5 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %2, <2 x double> %4, i8 0) 281 %6 = extractelement <2 x double> %5, i32 0 282 ret double %6 283 } 284 285 define double @test_cmp_sd_1(double %a, double %b) { 286 ; CHECK-LABEL: @test_cmp_sd_1( 287 ; CHECK-NEXT: ret double 1.000000e+00 288 ; 289 %1 = insertelement <2 x double> undef, double %a, i32 0 290 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 291 %3 = insertelement <2 x double> undef, double %b, i32 0 292 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 293 %5 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %2, <2 x double> %4, i8 0) 294 %6 = extractelement <2 x double> %5, i32 1 295 ret double %6 296 } 297 298 define i32 @test_comieq_sd_0(double %a, double %b) { 299 ; CHECK-LABEL: @test_comieq_sd_0( 300 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 301 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 302 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comieq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 303 ; CHECK-NEXT: ret i32 [[TMP3]] 304 ; 305 %1 = insertelement <2 x double> undef, double %a, i32 0 306 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 307 %3 = insertelement <2 x double> undef, double %b, i32 0 308 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 309 %5 = tail call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %2, <2 x double> %4) 310 ret i32 %5 311 } 312 313 define i32 @test_comige_sd_0(double %a, double %b) { 314 ; CHECK-LABEL: @test_comige_sd_0( 315 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 316 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 317 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comige.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 318 ; CHECK-NEXT: ret i32 [[TMP3]] 319 ; 320 %1 = insertelement <2 x double> undef, double %a, i32 0 321 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 322 %3 = insertelement <2 x double> undef, double %b, i32 0 323 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 324 %5 = tail call i32 @llvm.x86.sse2.comige.sd(<2 x double> %2, <2 x double> %4) 325 ret i32 %5 326 } 327 328 define i32 @test_comigt_sd_0(double %a, double %b) { 329 ; CHECK-LABEL: @test_comigt_sd_0( 330 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 331 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 332 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comigt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 333 ; CHECK-NEXT: ret i32 [[TMP3]] 334 ; 335 %1 = insertelement <2 x double> undef, double %a, i32 0 336 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 337 %3 = insertelement <2 x double> undef, double %b, i32 0 338 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 339 %5 = tail call i32 @llvm.x86.sse2.comigt.sd(<2 x double> %2, <2 x double> %4) 340 ret i32 %5 341 } 342 343 define i32 @test_comile_sd_0(double %a, double %b) { 344 ; CHECK-LABEL: @test_comile_sd_0( 345 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 346 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 347 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comile.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 348 ; CHECK-NEXT: ret i32 [[TMP3]] 349 ; 350 %1 = insertelement <2 x double> undef, double %a, i32 0 351 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 352 %3 = insertelement <2 x double> undef, double %b, i32 0 353 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 354 %5 = tail call i32 @llvm.x86.sse2.comile.sd(<2 x double> %2, <2 x double> %4) 355 ret i32 %5 356 } 357 358 define i32 @test_comilt_sd_0(double %a, double %b) { 359 ; CHECK-LABEL: @test_comilt_sd_0( 360 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 361 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 362 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comilt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 363 ; CHECK-NEXT: ret i32 [[TMP3]] 364 ; 365 %1 = insertelement <2 x double> undef, double %a, i32 0 366 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 367 %3 = insertelement <2 x double> undef, double %b, i32 0 368 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 369 %5 = tail call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %2, <2 x double> %4) 370 ret i32 %5 371 } 372 373 define i32 @test_comineq_sd_0(double %a, double %b) { 374 ; CHECK-LABEL: @test_comineq_sd_0( 375 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 376 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 377 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comineq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 378 ; CHECK-NEXT: ret i32 [[TMP3]] 379 ; 380 %1 = insertelement <2 x double> undef, double %a, i32 0 381 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 382 %3 = insertelement <2 x double> undef, double %b, i32 0 383 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 384 %5 = tail call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %2, <2 x double> %4) 385 ret i32 %5 386 } 387 388 define i32 @test_ucomieq_sd_0(double %a, double %b) { 389 ; CHECK-LABEL: @test_ucomieq_sd_0( 390 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 391 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 392 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 393 ; CHECK-NEXT: ret i32 [[TMP3]] 394 ; 395 %1 = insertelement <2 x double> undef, double %a, i32 0 396 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 397 %3 = insertelement <2 x double> undef, double %b, i32 0 398 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 399 %5 = tail call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %2, <2 x double> %4) 400 ret i32 %5 401 } 402 403 define i32 @test_ucomige_sd_0(double %a, double %b) { 404 ; CHECK-LABEL: @test_ucomige_sd_0( 405 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 406 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 407 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 408 ; CHECK-NEXT: ret i32 [[TMP3]] 409 ; 410 %1 = insertelement <2 x double> undef, double %a, i32 0 411 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 412 %3 = insertelement <2 x double> undef, double %b, i32 0 413 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 414 %5 = tail call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> %2, <2 x double> %4) 415 ret i32 %5 416 } 417 418 define i32 @test_ucomigt_sd_0(double %a, double %b) { 419 ; CHECK-LABEL: @test_ucomigt_sd_0( 420 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 421 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 422 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 423 ; CHECK-NEXT: ret i32 [[TMP3]] 424 ; 425 %1 = insertelement <2 x double> undef, double %a, i32 0 426 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 427 %3 = insertelement <2 x double> undef, double %b, i32 0 428 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 429 %5 = tail call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> %2, <2 x double> %4) 430 ret i32 %5 431 } 432 433 define i32 @test_ucomile_sd_0(double %a, double %b) { 434 ; CHECK-LABEL: @test_ucomile_sd_0( 435 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 436 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 437 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 438 ; CHECK-NEXT: ret i32 [[TMP3]] 439 ; 440 %1 = insertelement <2 x double> undef, double %a, i32 0 441 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 442 %3 = insertelement <2 x double> undef, double %b, i32 0 443 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 444 %5 = tail call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %2, <2 x double> %4) 445 ret i32 %5 446 } 447 448 define i32 @test_ucomilt_sd_0(double %a, double %b) { 449 ; CHECK-LABEL: @test_ucomilt_sd_0( 450 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 451 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 452 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 453 ; CHECK-NEXT: ret i32 [[TMP3]] 454 ; 455 %1 = insertelement <2 x double> undef, double %a, i32 0 456 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 457 %3 = insertelement <2 x double> undef, double %b, i32 0 458 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 459 %5 = tail call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %2, <2 x double> %4) 460 ret i32 %5 461 } 462 463 define i32 @test_ucomineq_sd_0(double %a, double %b) { 464 ; CHECK-LABEL: @test_ucomineq_sd_0( 465 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0 466 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0 467 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]]) 468 ; CHECK-NEXT: ret i32 [[TMP3]] 469 ; 470 %1 = insertelement <2 x double> undef, double %a, i32 0 471 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1 472 %3 = insertelement <2 x double> undef, double %b, i32 0 473 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1 474 %5 = tail call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %2, <2 x double> %4) 475 ret i32 %5 476 } 477 478 declare <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double>) nounwind readnone 479 480 declare <2 x double> @llvm.x86.sse2.add.sd(<2 x double>, <2 x double>) 481 declare <2 x double> @llvm.x86.sse2.sub.sd(<2 x double>, <2 x double>) 482 declare <2 x double> @llvm.x86.sse2.mul.sd(<2 x double>, <2 x double>) 483 declare <2 x double> @llvm.x86.sse2.div.sd(<2 x double>, <2 x double>) 484 declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>) 485 declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>) 486 declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8) 487 488 declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) 489 declare i32 @llvm.x86.sse2.comige.sd(<2 x double>, <2 x double>) 490 declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>) 491 declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>) 492 declare i32 @llvm.x86.sse2.comilt.sd(<2 x double>, <2 x double>) 493 declare i32 @llvm.x86.sse2.comineq.sd(<2 x double>, <2 x double>) 494 495 declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>) 496 declare i32 @llvm.x86.sse2.ucomige.sd(<2 x double>, <2 x double>) 497 declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>) 498 declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>) 499 declare i32 @llvm.x86.sse2.ucomilt.sd(<2 x double>, <2 x double>) 500 declare i32 @llvm.x86.sse2.ucomineq.sd(<2 x double>, <2 x double>) 501