1; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s 2 3; Test that operations that are not supported by SIMD are properly 4; unrolled. 5 6target triple = "wasm32-unknown-unknown" 7 8; ============================================================================== 9; 16 x i8 10; ============================================================================== 11 12; CHECK-LABEL: ctlz_v16i8: 13; CHECK: i8x16.popcnt 14declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) 15define <16 x i8> @ctlz_v16i8(<16 x i8> %x) { 16 %v = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %x, i1 false) 17 ret <16 x i8> %v 18} 19 20; CHECK-LABEL: ctlz_v16i8_undef: 21; CHECK: i8x16.popcnt 22define <16 x i8> @ctlz_v16i8_undef(<16 x i8> %x) { 23 %v = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %x, i1 true) 24 ret <16 x i8> %v 25} 26 27; CHECK-LABEL: cttz_v16i8: 28; CHECK: i8x16.popcnt 29declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1) 30define <16 x i8> @cttz_v16i8(<16 x i8> %x) { 31 %v = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %x, i1 false) 32 ret <16 x i8> %v 33} 34 35; CHECK-LABEL: cttz_v16i8_undef: 36; CHECK: i8x16.popcnt 37define <16 x i8> @cttz_v16i8_undef(<16 x i8> %x) { 38 %v = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %x, i1 true) 39 ret <16 x i8> %v 40} 41 42; CHECK-LABEL: sdiv_v16i8: 43; CHECK: i32.div_s 44define <16 x i8> @sdiv_v16i8(<16 x i8> %x, <16 x i8> %y) { 45 %v = sdiv <16 x i8> %x, %y 46 ret <16 x i8> %v 47} 48 49; CHECK-LABEL: udiv_v16i8: 50; CHECK: i32.div_u 51define <16 x i8> @udiv_v16i8(<16 x i8> %x, <16 x i8> %y) { 52 %v = udiv <16 x i8> %x, %y 53 ret <16 x i8> %v 54} 55 56; CHECK-LABEL: srem_v16i8: 57; CHECK: i32.rem_s 58define <16 x i8> @srem_v16i8(<16 x i8> %x, <16 x i8> %y) { 59 %v = srem <16 x i8> %x, %y 60 ret <16 x i8> %v 61} 62 63; CHECK-LABEL: urem_v16i8: 64; CHECK: i32.rem_u 65define <16 x i8> @urem_v16i8(<16 x i8> %x, <16 x i8> %y) { 66 %v = urem <16 x i8> %x, %y 67 ret <16 x i8> %v 68} 69 70; CHECK-LABEL: rotl_v16i8: 71; Note: expansion does not use i32.rotl 72; CHECK: i32.shl 73declare <16 x i8> @llvm.fshl.v16i8(<16 x i8>, <16 x i8>, <16 x i8>) 74define <16 x i8> @rotl_v16i8(<16 x i8> %x, <16 x i8> %y) { 75 %v = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %x, <16 x i8> %x, <16 x i8> %y) 76 ret <16 x i8> %v 77} 78 79; CHECK-LABEL: rotr_v16i8: 80; Note: expansion does not use i32.rotr 81; CHECK: i32.shr_u 82declare <16 x i8> @llvm.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>) 83define <16 x i8> @rotr_v16i8(<16 x i8> %x, <16 x i8> %y) { 84 %v = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %x, <16 x i8> %y) 85 ret <16 x i8> %v 86} 87 88; ============================================================================== 89; 8 x i16 90; ============================================================================== 91 92; CHECK-LABEL: ctlz_v8i16: 93; CHECK: i32.clz 94declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) 95define <8 x i16> @ctlz_v8i16(<8 x i16> %x) { 96 %v = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %x, i1 false) 97 ret <8 x i16> %v 98} 99 100; CHECK-LABEL: ctlz_v8i16_undef: 101; CHECK: i32.clz 102define <8 x i16> @ctlz_v8i16_undef(<8 x i16> %x) { 103 %v = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %x, i1 true) 104 ret <8 x i16> %v 105} 106 107; CHECK-LABEL: cttz_v8i16: 108; CHECK: i32.ctz 109declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1) 110define <8 x i16> @cttz_v8i16(<8 x i16> %x) { 111 %v = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %x, i1 false) 112 ret <8 x i16> %v 113} 114 115; CHECK-LABEL: cttz_v8i16_undef: 116; CHECK: i32.ctz 117define <8 x i16> @cttz_v8i16_undef(<8 x i16> %x) { 118 %v = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %x, i1 true) 119 ret <8 x i16> %v 120} 121 122; CHECK-LABEL: ctpop_v8i16: 123; CHECK: i32.popcnt 124declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>) 125define <8 x i16> @ctpop_v8i16(<8 x i16> %x) { 126 %v = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %x) 127 ret <8 x i16> %v 128} 129 130; CHECK-LABEL: sdiv_v8i16: 131; CHECK: i32.div_s 132define <8 x i16> @sdiv_v8i16(<8 x i16> %x, <8 x i16> %y) { 133 %v = sdiv <8 x i16> %x, %y 134 ret <8 x i16> %v 135} 136 137; CHECK-LABEL: udiv_v8i16: 138; CHECK: i32.div_u 139define <8 x i16> @udiv_v8i16(<8 x i16> %x, <8 x i16> %y) { 140 %v = udiv <8 x i16> %x, %y 141 ret <8 x i16> %v 142} 143 144; CHECK-LABEL: srem_v8i16: 145; CHECK: i32.rem_s 146define <8 x i16> @srem_v8i16(<8 x i16> %x, <8 x i16> %y) { 147 %v = srem <8 x i16> %x, %y 148 ret <8 x i16> %v 149} 150 151; CHECK-LABEL: urem_v8i16: 152; CHECK: i32.rem_u 153define <8 x i16> @urem_v8i16(<8 x i16> %x, <8 x i16> %y) { 154 %v = urem <8 x i16> %x, %y 155 ret <8 x i16> %v 156} 157 158; CHECK-LABEL: rotl_v8i16: 159; Note: expansion does not use i32.rotl 160; CHECK: i32.shl 161declare <8 x i16> @llvm.fshl.v8i16(<8 x i16>, <8 x i16>, <8 x i16>) 162define <8 x i16> @rotl_v8i16(<8 x i16> %x, <8 x i16> %y) { 163 %v = call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %x, <8 x i16> %x, <8 x i16> %y) 164 ret <8 x i16> %v 165} 166 167; CHECK-LABEL: rotr_v8i16: 168; Note: expansion does not use i32.rotr 169; CHECK: i32.shr_u 170declare <8 x i16> @llvm.fshr.v8i16(<8 x i16>, <8 x i16>, <8 x i16>) 171define <8 x i16> @rotr_v8i16(<8 x i16> %x, <8 x i16> %y) { 172 %v = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %x, <8 x i16> %x, <8 x i16> %y) 173 ret <8 x i16> %v 174} 175 176; ============================================================================== 177; 4 x i32 178; ============================================================================== 179 180; CHECK-LABEL: ctlz_v4i32: 181; CHECK: i32.clz 182declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) 183define <4 x i32> @ctlz_v4i32(<4 x i32> %x) { 184 %v = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %x, i1 false) 185 ret <4 x i32> %v 186} 187 188; CHECK-LABEL: ctlz_v4i32_undef: 189; CHECK: i32.clz 190define <4 x i32> @ctlz_v4i32_undef(<4 x i32> %x) { 191 %v = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %x, i1 true) 192 ret <4 x i32> %v 193} 194 195; CHECK-LABEL: cttz_v4i32: 196; CHECK: i32.ctz 197declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1) 198define <4 x i32> @cttz_v4i32(<4 x i32> %x) { 199 %v = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %x, i1 false) 200 ret <4 x i32> %v 201} 202 203; CHECK-LABEL: cttz_v4i32_undef: 204; CHECK: i32.ctz 205define <4 x i32> @cttz_v4i32_undef(<4 x i32> %x) { 206 %v = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %x, i1 true) 207 ret <4 x i32> %v 208} 209 210; CHECK-LABEL: ctpop_v4i32: 211; CHECK: i32.popcnt 212declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>) 213define <4 x i32> @ctpop_v4i32(<4 x i32> %x) { 214 %v = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %x) 215 ret <4 x i32> %v 216} 217 218; CHECK-LABEL: sdiv_v4i32: 219; CHECK: i32.div_s 220define <4 x i32> @sdiv_v4i32(<4 x i32> %x, <4 x i32> %y) { 221 %v = sdiv <4 x i32> %x, %y 222 ret <4 x i32> %v 223} 224 225; CHECK-LABEL: udiv_v4i32: 226; CHECK: i32.div_u 227define <4 x i32> @udiv_v4i32(<4 x i32> %x, <4 x i32> %y) { 228 %v = udiv <4 x i32> %x, %y 229 ret <4 x i32> %v 230} 231 232; CHECK-LABEL: srem_v4i32: 233; CHECK: i32.rem_s 234define <4 x i32> @srem_v4i32(<4 x i32> %x, <4 x i32> %y) { 235 %v = srem <4 x i32> %x, %y 236 ret <4 x i32> %v 237} 238 239; CHECK-LABEL: urem_v4i32: 240; CHECK: i32.rem_u 241define <4 x i32> @urem_v4i32(<4 x i32> %x, <4 x i32> %y) { 242 %v = urem <4 x i32> %x, %y 243 ret <4 x i32> %v 244} 245 246; CHECK-LABEL: rotl_v4i32: 247; Note: expansion does not use i32.rotl 248; CHECK: i32.shl 249declare <4 x i32> @llvm.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>) 250define <4 x i32> @rotl_v4i32(<4 x i32> %x, <4 x i32> %y) { 251 %v = call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %x, <4 x i32> %x, <4 x i32> %y) 252 ret <4 x i32> %v 253} 254 255; CHECK-LABEL: rotr_v4i32: 256; Note: expansion does not use i32.rotr 257; CHECK: i32.shr_u 258declare <4 x i32> @llvm.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>) 259define <4 x i32> @rotr_v4i32(<4 x i32> %x, <4 x i32> %y) { 260 %v = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %x, <4 x i32> %x, <4 x i32> %y) 261 ret <4 x i32> %v 262} 263 264; ============================================================================== 265; 2 x i64 266; ============================================================================== 267 268; CHECK-LABEL: ctlz_v2i64: 269; CHECK: i64.clz 270declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) 271define <2 x i64> @ctlz_v2i64(<2 x i64> %x) { 272 %v = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %x, i1 false) 273 ret <2 x i64> %v 274} 275 276; CHECK-LABEL: ctlz_v2i64_undef: 277; CHECK: i64.clz 278define <2 x i64> @ctlz_v2i64_undef(<2 x i64> %x) { 279 %v = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %x, i1 true) 280 ret <2 x i64> %v 281} 282 283; CHECK-LABEL: cttz_v2i64: 284; CHECK: i64.ctz 285declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1) 286define <2 x i64> @cttz_v2i64(<2 x i64> %x) { 287 %v = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %x, i1 false) 288 ret <2 x i64> %v 289} 290 291; CHECK-LABEL: cttz_v2i64_undef: 292; CHECK: i64.ctz 293define <2 x i64> @cttz_v2i64_undef(<2 x i64> %x) { 294 %v = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %x, i1 true) 295 ret <2 x i64> %v 296} 297 298; CHECK-LABEL: ctpop_v2i64: 299; CHECK: i64.popcnt 300declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>) 301define <2 x i64> @ctpop_v2i64(<2 x i64> %x) { 302 %v = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %x) 303 ret <2 x i64> %v 304} 305 306; CHECK-LABEL: sdiv_v2i64: 307; CHECK: i64.div_s 308define <2 x i64> @sdiv_v2i64(<2 x i64> %x, <2 x i64> %y) { 309 %v = sdiv <2 x i64> %x, %y 310 ret <2 x i64> %v 311} 312 313; CHECK-LABEL: udiv_v2i64: 314; CHECK: i64.div_u 315define <2 x i64> @udiv_v2i64(<2 x i64> %x, <2 x i64> %y) { 316 %v = udiv <2 x i64> %x, %y 317 ret <2 x i64> %v 318} 319 320; CHECK-LABEL: srem_v2i64: 321; CHECK: i64.rem_s 322define <2 x i64> @srem_v2i64(<2 x i64> %x, <2 x i64> %y) { 323 %v = srem <2 x i64> %x, %y 324 ret <2 x i64> %v 325} 326 327; CHECK-LABEL: urem_v2i64: 328; CHECK: i64.rem_u 329define <2 x i64> @urem_v2i64(<2 x i64> %x, <2 x i64> %y) { 330 %v = urem <2 x i64> %x, %y 331 ret <2 x i64> %v 332} 333 334; CHECK-LABEL: rotl_v2i64: 335; Note: expansion does not use i64.rotl 336; CHECK: i64.shl 337declare <2 x i64> @llvm.fshl.v2i64(<2 x i64>, <2 x i64>, <2 x i64>) 338define <2 x i64> @rotl_v2i64(<2 x i64> %x, <2 x i64> %y) { 339 %v = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %x, <2 x i64> %x, <2 x i64> %y) 340 ret <2 x i64> %v 341} 342 343; CHECK-LABEL: rotr_v2i64: 344; Note: expansion does not use i64.rotr 345; CHECK: i64.shr_u 346declare <2 x i64> @llvm.fshr.v2i64(<2 x i64>, <2 x i64>, <2 x i64>) 347define <2 x i64> @rotr_v2i64(<2 x i64> %x, <2 x i64> %y) { 348 %v = call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %x, <2 x i64> %x, <2 x i64> %y) 349 ret <2 x i64> %v 350} 351 352; ============================================================================== 353; 4 x f32 354; ============================================================================== 355 356; CHECK-LABEL: copysign_v4f32: 357; CHECK: v128.const 358; CHECK-NEXT: v128.and 359; CHECK-NEXT: v128.const 360; CHECK-NEXT: v128.and 361; CHECK-NEXT: v128.or 362declare <4 x float> @llvm.copysign.v4f32(<4 x float>, <4 x float>) 363define <4 x float> @copysign_v4f32(<4 x float> %x, <4 x float> %y) { 364 %v = call <4 x float> @llvm.copysign.v4f32(<4 x float> %x, <4 x float> %y) 365 ret <4 x float> %v 366} 367 368; CHECK-LABEL: sin_v4f32: 369; CHECK: call $push[[L:[0-9]+]]=, sinf 370declare <4 x float> @llvm.sin.v4f32(<4 x float>) 371define <4 x float> @sin_v4f32(<4 x float> %x) { 372 %v = call <4 x float> @llvm.sin.v4f32(<4 x float> %x) 373 ret <4 x float> %v 374} 375 376; CHECK-LABEL: cos_v4f32: 377; CHECK: call $push[[L:[0-9]+]]=, cosf 378declare <4 x float> @llvm.cos.v4f32(<4 x float>) 379define <4 x float> @cos_v4f32(<4 x float> %x) { 380 %v = call <4 x float> @llvm.cos.v4f32(<4 x float> %x) 381 ret <4 x float> %v 382} 383 384; CHECK-LABEL: tan_v4f32: 385; CHECK: call $push[[L:[0-9]+]]=, tanf 386declare <4 x float> @llvm.tan.v4f32(<4 x float>) 387define <4 x float> @tan_v4f32(<4 x float> %x) { 388 %v = call <4 x float> @llvm.tan.v4f32(<4 x float> %x) 389 ret <4 x float> %v 390} 391 392; CHECK-LABEL: powi_v4f32: 393; CHECK: call $push[[L:[0-9]+]]=, __powisf2 394declare <4 x float> @llvm.powi.v4f32.i32(<4 x float>, i32) 395define <4 x float> @powi_v4f32(<4 x float> %x, i32 %y) { 396 %v = call <4 x float> @llvm.powi.v4f32.i32(<4 x float> %x, i32 %y) 397 ret <4 x float> %v 398} 399 400; CHECK-LABEL: pow_v4f32: 401; CHECK: call $push[[L:[0-9]+]]=, powf 402declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>) 403define <4 x float> @pow_v4f32(<4 x float> %x, <4 x float> %y) { 404 %v = call <4 x float> @llvm.pow.v4f32(<4 x float> %x, <4 x float> %y) 405 ret <4 x float> %v 406} 407 408; CHECK-LABEL: log_v4f32: 409; CHECK: call $push[[L:[0-9]+]]=, logf 410declare <4 x float> @llvm.log.v4f32(<4 x float>) 411define <4 x float> @log_v4f32(<4 x float> %x) { 412 %v = call <4 x float> @llvm.log.v4f32(<4 x float> %x) 413 ret <4 x float> %v 414} 415 416; CHECK-LABEL: log2_v4f32: 417; CHECK: call $push[[L:[0-9]+]]=, log2f 418declare <4 x float> @llvm.log2.v4f32(<4 x float>) 419define <4 x float> @log2_v4f32(<4 x float> %x) { 420 %v = call <4 x float> @llvm.log2.v4f32(<4 x float> %x) 421 ret <4 x float> %v 422} 423 424; CHECK-LABEL: log10_v4f32: 425; CHECK: call $push[[L:[0-9]+]]=, log10f 426declare <4 x float> @llvm.log10.v4f32(<4 x float>) 427define <4 x float> @log10_v4f32(<4 x float> %x) { 428 %v = call <4 x float> @llvm.log10.v4f32(<4 x float> %x) 429 ret <4 x float> %v 430} 431 432; CHECK-LABEL: exp_v4f32: 433; CHECK: call $push[[L:[0-9]+]]=, expf 434declare <4 x float> @llvm.exp.v4f32(<4 x float>) 435define <4 x float> @exp_v4f32(<4 x float> %x) { 436 %v = call <4 x float> @llvm.exp.v4f32(<4 x float> %x) 437 ret <4 x float> %v 438} 439 440; CHECK-LABEL: exp2_v4f32: 441; CHECK: call $push[[L:[0-9]+]]=, exp2f 442declare <4 x float> @llvm.exp2.v4f32(<4 x float>) 443define <4 x float> @exp2_v4f32(<4 x float> %x) { 444 %v = call <4 x float> @llvm.exp2.v4f32(<4 x float> %x) 445 ret <4 x float> %v 446} 447 448; CHECK-LABEL: round_v4f32: 449; CHECK: call $push[[L:[0-9]+]]=, roundf 450declare <4 x float> @llvm.round.v4f32(<4 x float>) 451define <4 x float> @round_v4f32(<4 x float> %x) { 452 %v = call <4 x float> @llvm.round.v4f32(<4 x float> %x) 453 ret <4 x float> %v 454} 455 456; ============================================================================== 457; 2 x f64 458; ============================================================================== 459 460; CHECK-LABEL: copysign_v2f64: 461; CHECK: v128.const 462; CHECK-NEXT: v128.and 463; CHECK-NEXT: v128.const 464; CHECK-NEXT: v128.and 465; CHECK-NEXT: v128.or 466declare <2 x double> @llvm.copysign.v2f64(<2 x double>, <2 x double>) 467define <2 x double> @copysign_v2f64(<2 x double> %x, <2 x double> %y) { 468 %v = call <2 x double> @llvm.copysign.v2f64(<2 x double> %x, <2 x double> %y) 469 ret <2 x double> %v 470} 471 472; CHECK-LABEL: sin_v2f64: 473; CHECK: call $push[[L:[0-9]+]]=, sin 474declare <2 x double> @llvm.sin.v2f64(<2 x double>) 475define <2 x double> @sin_v2f64(<2 x double> %x) { 476 %v = call <2 x double> @llvm.sin.v2f64(<2 x double> %x) 477 ret <2 x double> %v 478} 479 480; CHECK-LABEL: cos_v2f64: 481; CHECK: call $push[[L:[0-9]+]]=, cos 482declare <2 x double> @llvm.cos.v2f64(<2 x double>) 483define <2 x double> @cos_v2f64(<2 x double> %x) { 484 %v = call <2 x double> @llvm.cos.v2f64(<2 x double> %x) 485 ret <2 x double> %v 486} 487 488; CHECK-LABEL: tan_v2f64: 489; CHECK: call $push[[L:[0-9]+]]=, tan 490declare <2 x double> @llvm.tan.v2f64(<2 x double>) 491define <2 x double> @tan_v2f64(<2 x double> %x) { 492 %v = call <2 x double> @llvm.tan.v2f64(<2 x double> %x) 493 ret <2 x double> %v 494} 495 496; CHECK-LABEL: powi_v2f64: 497; CHECK: call $push[[L:[0-9]+]]=, __powidf2 498declare <2 x double> @llvm.powi.v2f64.i32(<2 x double>, i32) 499define <2 x double> @powi_v2f64(<2 x double> %x, i32 %y) { 500 %v = call <2 x double> @llvm.powi.v2f64.i32(<2 x double> %x, i32 %y) 501 ret <2 x double> %v 502} 503 504; CHECK-LABEL: pow_v2f64: 505; CHECK: call $push[[L:[0-9]+]]=, pow 506declare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>) 507define <2 x double> @pow_v2f64(<2 x double> %x, <2 x double> %y) { 508 %v = call <2 x double> @llvm.pow.v2f64(<2 x double> %x, <2 x double> %y) 509 ret <2 x double> %v 510} 511 512; CHECK-LABEL: log_v2f64: 513; CHECK: call $push[[L:[0-9]+]]=, log 514declare <2 x double> @llvm.log.v2f64(<2 x double>) 515define <2 x double> @log_v2f64(<2 x double> %x) { 516 %v = call <2 x double> @llvm.log.v2f64(<2 x double> %x) 517 ret <2 x double> %v 518} 519 520; CHECK-LABEL: log2_v2f64: 521; CHECK: call $push[[L:[0-9]+]]=, log2 522declare <2 x double> @llvm.log2.v2f64(<2 x double>) 523define <2 x double> @log2_v2f64(<2 x double> %x) { 524 %v = call <2 x double> @llvm.log2.v2f64(<2 x double> %x) 525 ret <2 x double> %v 526} 527 528; CHECK-LABEL: log10_v2f64: 529; CHECK: call $push[[L:[0-9]+]]=, log10 530declare <2 x double> @llvm.log10.v2f64(<2 x double>) 531define <2 x double> @log10_v2f64(<2 x double> %x) { 532 %v = call <2 x double> @llvm.log10.v2f64(<2 x double> %x) 533 ret <2 x double> %v 534} 535 536; CHECK-LABEL: exp_v2f64: 537; CHECK: call $push[[L:[0-9]+]]=, exp 538declare <2 x double> @llvm.exp.v2f64(<2 x double>) 539define <2 x double> @exp_v2f64(<2 x double> %x) { 540 %v = call <2 x double> @llvm.exp.v2f64(<2 x double> %x) 541 ret <2 x double> %v 542} 543 544; CHECK-LABEL: exp2_v2f64: 545; CHECK: call $push[[L:[0-9]+]]=, exp2 546declare <2 x double> @llvm.exp2.v2f64(<2 x double>) 547define <2 x double> @exp2_v2f64(<2 x double> %x) { 548 %v = call <2 x double> @llvm.exp2.v2f64(<2 x double> %x) 549 ret <2 x double> %v 550} 551 552; CHECK-LABEL: round_v2f64: 553; CHECK: call $push[[L:[0-9]+]]=, round 554declare <2 x double> @llvm.round.v2f64(<2 x double>) 555define <2 x double> @round_v2f64(<2 x double> %x) { 556 %v = call <2 x double> @llvm.round.v2f64(<2 x double> %x) 557 ret <2 x double> %v 558} 559