brintos

brintos / llvm-project-archived public Read only

0
0
Text · 77.4 KiB · 2381d7a Raw
1417 lines · plain
1; RUN: mlir-translate -import-llvm %s | FileCheck %s2 3; CHECK-LABEL:  llvm.func @fmuladd_test4define void @fmuladd_test(float %0, float %1, <8 x float> %2, ptr %3) {5  ; CHECK: llvm.intr.fmuladd(%{{.*}}, %{{.*}}, %{{.*}}) : (f32, f32, f32) -> f326  %5 = call float @llvm.fmuladd.f32(float %0, float %1, float %0)7  ; CHECK: llvm.intr.fmuladd(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xf32>) -> vector<8xf32>8  %6 = call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %2, <8 x float> %2, <8 x float> %2)9  ; CHECK: llvm.intr.fma(%{{.*}}, %{{.*}}, %{{.*}}) : (f32, f32, f32) -> f3210  %7 = call float @llvm.fma.f32(float %0, float %1, float %0)11  ; CHECK: llvm.intr.fma(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xf32>) -> vector<8xf32>12  %8 = call <8 x float> @llvm.fma.v8f32(<8 x float> %2, <8 x float> %2, <8 x float> %2)13  ; CHECK: "llvm.intr.prefetch"(%{{.*}}) <{cache = 1 : i32, hint = 3 : i32, rw = 0 : i32}> : (!llvm.ptr) -> ()14  call void @llvm.prefetch.p0(ptr %3, i32 0, i32 3, i32 1)15  ret void16}17 18; CHECK-LABEL:  llvm.func @fpclass_test19define void @fpclass_test(float %0, <8 x float> %1) {20  ; CHECK: "llvm.intr.is.fpclass"(%{{.*}}) <{bit = 0 : i32}> : (f32) -> i121  %3 = call i1 @llvm.is.fpclass.f32(float %0, i32 0)22  ; CHECK: "llvm.intr.is.fpclass"(%{{.*}}) <{bit = 1 : i32}> : (vector<8xf32>) -> vector<8xi1>23  %4 = call <8 x i1> @llvm.is.fpclass.v8f32(<8 x float> %1, i32 1)24  ret void25}26 27; CHECK-LABEL:  llvm.func @exp_test28define void @exp_test(float %0, <8 x float> %1) {29  ; CHECK: llvm.intr.exp(%{{.*}}) : (f32) -> f3230  %3 = call float @llvm.exp.f32(float %0)31  ; CHECK: llvm.intr.exp(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>32  %4 = call <8 x float> @llvm.exp.v8f32(<8 x float> %1)33  ret void34}35 36; CHECK-LABEL:  llvm.func @exp2_test37define void @exp2_test(float %0, <8 x float> %1) {38  ; CHECK:  llvm.intr.exp2(%{{.*}}) : (f32) -> f3239  %3 = call float @llvm.exp2.f32(float %0)40  ; CHECK:  llvm.intr.exp2(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>41  %4 = call <8 x float> @llvm.exp2.v8f32(<8 x float> %1)42  ret void43}44 45; CHECK-LABEL:  llvm.func @exp10_test46define void @exp10_test(float %0, <8 x float> %1) {47  ; CHECK:  llvm.intr.exp10(%{{.*}}) : (f32) -> f3248  %3 = call float @llvm.exp10.f32(float %0)49  ; CHECK:  llvm.intr.exp10(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>50  %4 = call <8 x float> @llvm.exp10.v8f32(<8 x float> %1)51  ret void52}53 54; CHECK-LABEL:  llvm.func @ldexp_test55define void @ldexp_test(float %0, <8 x float> %1, i32 %2) {56  ; CHECK:  llvm.intr.ldexp(%{{.*}}, %{{.*}}) : (f32, i32) -> f3257  %4 = call float @llvm.ldexp.f32.i32(float %0, i32 %2)58  ; CHECK:  llvm.intr.ldexp(%{{.*}}, %{{.*}}) : (vector<8xf32>, i32) -> vector<8xf32>59  %5 = call <8 x float> @llvm.ldexp.v8f32.i32(<8 x float> %1, i32 %2)60  ret void61}62 63; CHECK-LABEL:  llvm.func @frexp_test64define void @frexp_test(float %0, <8 x float> %1) {65  ; CHECK:  llvm.intr.frexp(%{{.*}}) : (f32) -> !llvm.struct<(f32, i32)>66  %4 = call { float, i32 } @llvm.frexp.f32.i32(float %0)67  ; CHECK:  llvm.intr.frexp(%{{.*}}) : (vector<8xf32>) -> !llvm.struct<(vector<8xf32>, i32)>68  %5 = call { <8 x float>, i32 } @llvm.frexp.v8f32.i32(<8 x float> %1)69  ret void70}71 72; CHECK-LABEL:  llvm.func @log_test73define void @log_test(float %0, <8 x float> %1) {74  ; CHECK:  llvm.intr.log(%{{.*}}) : (f32) -> f3275  %3 = call float @llvm.log.f32(float %0)76  ; CHECK:  llvm.intr.log(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>77  %4 = call <8 x float> @llvm.log.v8f32(<8 x float> %1)78  ret void79}80 81; CHECK-LABEL:  llvm.func @log10_test82define void @log10_test(float %0, <8 x float> %1) {83  ; CHECK:  llvm.intr.log10(%{{.*}}) : (f32) -> f3284  %3 = call float @llvm.log10.f32(float %0)85  ; CHECK:  llvm.intr.log10(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>86  %4 = call <8 x float> @llvm.log10.v8f32(<8 x float> %1)87  ret void88}89 90; CHECK-LABEL:  llvm.func @log2_test91define void @log2_test(float %0, <8 x float> %1)  {92  ; CHECK:  llvm.intr.log2(%{{.*}}) : (f32) -> f3293  %3 = call float @llvm.log2.f32(float %0)94  ; CHECK: llvm.intr.log2(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>95  %4 = call <8 x float> @llvm.log2.v8f32(<8 x float> %1)96  ret void97}98 99; CHECK-LABEL:  llvm.func @fabs_test100define void @fabs_test(float %0, <8 x float> %1) {101  ; CHECK: llvm.intr.fabs(%{{.*}}) : (f32) -> f32102  %3 = call float @llvm.fabs.f32(float %0)103  ; CHECK: llvm.intr.fabs(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>104  %4 = call <8 x float> @llvm.fabs.v8f32(<8 x float> %1)105  ret void106}107; CHECK-LABEL:  llvm.func @sqrt_test108define void @sqrt_test(float %0, <8 x float> %1) {109  ; CHECK: llvm.intr.sqrt(%{{.*}}) : (f32) -> f32110  %3 = call float @llvm.sqrt.f32(float %0)111  ; CHECK: llvm.intr.sqrt(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>112  %4 = call <8 x float> @llvm.sqrt.v8f32(<8 x float> %1)113  ret void114}115; CHECK-LABEL:  llvm.func @ceil_test116define void @ceil_test(float %0, <8 x float> %1) {117  ; CHECK: llvm.intr.ceil(%{{.*}}) : (f32) -> f32118  %3 = call float @llvm.ceil.f32(float %0)119  ; CHECK: llvm.intr.ceil(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>120  %4 = call <8 x float> @llvm.ceil.v8f32(<8 x float> %1)121  ret void122}123; CHECK-LABEL:  llvm.func @floor_test124define void @floor_test(float %0, <8 x float> %1) {125  ; CHECK: llvm.intr.floor(%{{.*}}) : (f32) -> f32126  %3 = call float @llvm.floor.f32(float %0)127  ; CHECK: llvm.intr.floor(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>128  %4 = call <8 x float> @llvm.floor.v8f32(<8 x float> %1)129  ret void130}131; CHECK-LABEL:  llvm.func @trig_test132define void @trig_test(float %0, <8 x float> %1) {133  ; CHECK: llvm.intr.sin(%{{.*}}) : (f32) -> f32134  %3 = call float @llvm.sin.f32(float %0)135  ; CHECK: llvm.intr.sin(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>136  %4 = call <8 x float> @llvm.sin.v8f32(<8 x float> %1)137 138  ; CHECK: llvm.intr.cos(%{{.*}}) : (f32) -> f32139  %5 = call float @llvm.cos.f32(float %0)140  ; CHECK: llvm.intr.cos(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>141  %6 = call <8 x float> @llvm.cos.v8f32(<8 x float> %1)142 143  ; CHECK: llvm.intr.tan(%{{.*}}) : (f32) -> f32144  %7 = call float @llvm.tan.f32(float %0)145  ; CHECK: llvm.intr.tan(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>146  %8 = call <8 x float> @llvm.tan.v8f32(<8 x float> %1)147 148  ret void149}150; CHECK-LABEL:  llvm.func @inv_trig_test151define void @inv_trig_test(float %0, <8 x float> %1) {152  ; CHECK: llvm.intr.asin(%{{.*}}) : (f32) -> f32153  %3 = call float @llvm.asin.f32(float %0)154  ; CHECK: llvm.intr.asin(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>155  %4 = call <8 x float> @llvm.asin.v8f32(<8 x float> %1)156 157  ; CHECK: llvm.intr.acos(%{{.*}}) : (f32) -> f32158  %5 = call float @llvm.acos.f32(float %0)159  ; CHECK: llvm.intr.acos(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>160  %6 = call <8 x float> @llvm.acos.v8f32(<8 x float> %1)161 162  ; CHECK: llvm.intr.atan(%{{.*}}) : (f32) -> f32163  %7 = call float @llvm.atan.f32(float %0)164  ; CHECK: llvm.intr.atan(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>165  %8 = call <8 x float> @llvm.atan.v8f32(<8 x float> %1)166 167  ret void168}169; CHECK-LABEL:  llvm.func @atan2_test170define void @atan2_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {171  ; CHECK:  llvm.intr.atan2(%{{.*}}, %{{.*}}) : (f32, f32) -> f32172  %5 = call float @llvm.atan2.f32(float %0, float %1)173  ; CHECK:  llvm.intr.atan2(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>174  %6 = call <8 x float> @llvm.atan2.v8f32(<8 x float> %2, <8 x float> %3)175  ret void176}177; CHECK-LABEL:  llvm.func @hyperbolic_trig_test178define void @hyperbolic_trig_test(float %0, <8 x float> %1) {179  ; CHECK: llvm.intr.sinh(%{{.*}}) : (f32) -> f32180  %3 = call float @llvm.sinh.f32(float %0)181  ; CHECK: llvm.intr.sinh(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>182  %4 = call <8 x float> @llvm.sinh.v8f32(<8 x float> %1)183 184  ; CHECK: llvm.intr.cosh(%{{.*}}) : (f32) -> f32185  %5 = call float @llvm.cosh.f32(float %0)186  ; CHECK: llvm.intr.cosh(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>187  %6 = call <8 x float> @llvm.cosh.v8f32(<8 x float> %1)188 189  ; CHECK: llvm.intr.tanh(%{{.*}}) : (f32) -> f32190  %7 = call float @llvm.tanh.f32(float %0)191  ; CHECK: llvm.intr.tanh(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>192  %8 = call <8 x float> @llvm.tanh.v8f32(<8 x float> %1)193  ret void194}195 196; CHECK-LABEL:  llvm.func @copysign_test197define void @copysign_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {198  ; CHECK:  llvm.intr.copysign(%{{.*}}, %{{.*}}) : (f32, f32) -> f32199  %5 = call float @llvm.copysign.f32(float %0, float %1)200  ; CHECK:  llvm.intr.copysign(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>201  %6 = call <8 x float> @llvm.copysign.v8f32(<8 x float> %2, <8 x float> %3)202  ret void203}204; CHECK-LABEL:  llvm.func @pow_test205define void @pow_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {206  ; CHECK:  llvm.intr.pow(%{{.*}}, %{{.*}}) : (f32, f32) -> f32207  %5 = call float @llvm.pow.f32(float %0, float %1)208  ; CHECK:  llvm.intr.pow(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>209  %6 = call <8 x float> @llvm.pow.v8f32(<8 x float> %2, <8 x float> %3)210  ret void211}212 213; CHECK-LABEL: llvm.func @rint_test214define void @rint_test(float %0, double %1, <8 x float> %2, <8 x double> %3) {215  ; CHECK: llvm.intr.rint(%{{.*}}) : (f32) -> f32216  %5 = call float @llvm.rint.f32(float %0)217  ; CHECK: llvm.intr.rint(%{{.*}}) : (f64) -> f64218  %6 = call double @llvm.rint.f64(double %1)219  ; CHECK: llvm.intr.rint(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>220  %7 = call <8 x float> @llvm.rint.v8f32(<8 x float> %2)221  ; CHECK: llvm.intr.rint(%{{.*}}) : (vector<8xf64>) -> vector<8xf64>222  %8 = call <8 x double> @llvm.rint.v8f64(<8 x double> %3)223  ret void224}225; CHECK-LABEL: llvm.func @nearbyint_test226define void @nearbyint_test(float %0, double %1, <8 x float> %2, <8 x double> %3) {227  ; CHECK: llvm.intr.nearbyint(%{{.*}}) : (f32) -> f32228  %5 = call float @llvm.nearbyint.f32(float %0)229  ; CHECK: llvm.intr.nearbyint(%{{.*}}) : (f64) -> f64230  %6 = call double @llvm.nearbyint.f64(double %1)231  ; CHECK: llvm.intr.nearbyint(%{{.*}}) : (vector<8xf32>) -> vector<8xf32>232  %7 = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %2)233  ; CHECK: llvm.intr.nearbyint(%{{.*}}) : (vector<8xf64>) -> vector<8xf64>234  %8 = call <8 x double> @llvm.nearbyint.v8f64(<8 x double> %3)235  ret void236}237; CHECK-LABEL: llvm.func @lround_test238define void @lround_test(float %0, double %1, <2 x float> %2, <2 x double> %3) {239  ; CHECK: llvm.intr.lround(%{{.*}}) : (f32) -> i32240  %5 = call i32 @llvm.lround.i32.f32(float %0)241  ; CHECK: llvm.intr.lround(%{{.*}}) : (f32) -> i64242  %6 = call i64 @llvm.lround.i64.f32(float %0)243  ; CHECK: llvm.intr.lround(%{{.*}}) : (f64) -> i32244  %7 = call i32 @llvm.lround.i32.f64(double %1)245  ; CHECK: llvm.intr.lround(%{{.*}}) : (f64) -> i64246  %8 = call i64 @llvm.lround.i64.f64(double %1)247  ; CHECK: llvm.intr.lround(%{{.*}}) : (vector<2xf32>) -> vector<2xi32>248  %9 = call <2 x i32> @llvm.lround.v2i32.v2f32(<2 x float> %2)249  ; CHECK: llvm.intr.lround(%{{.*}}) : (vector<2xf64>) -> vector<2xi32>250  %10 = call <2 x i32> @llvm.lround.v2i32.v2f64(<2 x double> %3)251  ; CHECK: llvm.intr.lround(%{{.*}}) : (vector<2xf32>) -> vector<2xi64>252  %11 = call <2 x i64> @llvm.lround.v2i64.v2f32(<2 x float> %2)253  ; CHECK: llvm.intr.lround(%{{.*}}) : (vector<2xf64>) -> vector<2xi64>254  %12 = call <2 x i64> @llvm.lround.v2i64.v2f64(<2 x double> %3)255  ret void256}257; CHECK-LABEL: llvm.func @llround_test258define void @llround_test(float %0, double %1) {259  ; CHECK: llvm.intr.llround(%{{.*}}) : (f32) -> i64260  %3 = call i64 @llvm.llround.i64.f32(float %0)261  ; CHECK: llvm.intr.llround(%{{.*}}) : (f64) -> i64262  %4 = call i64 @llvm.llround.i64.f64(double %1)263  ret void264}265; CHECK-LABEL: llvm.func @lrint_test266define void @lrint_test(float %0, double %1, <2 x float> %2, <2 x double> %3) {267  ; CHECK: llvm.intr.lrint(%{{.*}}) : (f32) -> i32268  %5 = call i32 @llvm.lrint.i32.f32(float %0)269  ; CHECK: llvm.intr.lrint(%{{.*}}) : (f32) -> i64270  %6 = call i64 @llvm.lrint.i64.f32(float %0)271  ; CHECK: llvm.intr.lrint(%{{.*}}) : (f64) -> i32272  %7 = call i32 @llvm.lrint.i32.f64(double %1)273  ; CHECK: llvm.intr.lrint(%{{.*}}) : (f64) -> i64274  %8 = call i64 @llvm.lrint.i64.f64(double %1)275  ; CHECK: llvm.intr.lrint(%{{.*}}) : (vector<2xf32>) -> vector<2xi32>276  %9 = call <2 x i32> @llvm.lrint.v2i32.v2f32(<2 x float> %2)277  ; CHECK: llvm.intr.lrint(%{{.*}}) : (vector<2xf64>) -> vector<2xi32>278  %10 = call <2 x i32> @llvm.lrint.v2i32.v2f64(<2 x double> %3)279  ; CHECK: llvm.intr.lrint(%{{.*}}) : (vector<2xf32>) -> vector<2xi64>280  %11 = call <2 x i64> @llvm.lrint.v2i64.v2f32(<2 x float> %2)281  ; CHECK: llvm.intr.lrint(%{{.*}}) : (vector<2xf64>) -> vector<2xi64>282  %12 = call <2 x i64> @llvm.lrint.v2i64.v2f64(<2 x double> %3)283  ret void284}285; CHECK-LABEL: llvm.func @llrint_test286define void @llrint_test(float %0, double %1, <2 x float> %2, <2 x double> %3) {287  ; CHECK: llvm.intr.llrint(%{{.*}}) : (f32) -> i64288  %5 = call i64 @llvm.llrint.i64.f32(float %0)289  ; CHECK: llvm.intr.llrint(%{{.*}}) : (f64) -> i64290  %6 = call i64 @llvm.llrint.i64.f64(double %1)291  ; CHECK: llvm.intr.llrint(%{{.*}}) : (vector<2xf32>) -> vector<2xi64>292  %7 = call <2 x i64> @llvm.llrint.v2i64.v2f32(<2 x float> %2)293  ; CHECK: llvm.intr.llrint(%{{.*}}) : (vector<2xf64>) -> vector<2xi64>294  %8 = call <2 x i64> @llvm.llrint.v2i64.v2f64(<2 x double> %3)295  ret void296}297 298; CHECK-LABEL:  llvm.func @bitreverse_test299define void @bitreverse_test(i32 %0, <8 x i32> %1) {300  ; CHECK:   llvm.intr.bitreverse(%{{.*}}) : (i32) -> i32301  %3 = call i32 @llvm.bitreverse.i32(i32 %0)302  ; CHECK:   llvm.intr.bitreverse(%{{.*}}) : (vector<8xi32>) -> vector<8xi32>303  %4 = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %1)304  ret void305}306; CHECK-LABEL:  llvm.func @byteswap_test307define void @byteswap_test(i32 %0, <8 x i32> %1) {308  ; CHECK:   llvm.intr.bswap(%{{.*}}) : (i32) -> i32309  %3 = call i32 @llvm.bswap.i32(i32 %0)310  ; CHECK:   llvm.intr.bswap(%{{.*}}) : (vector<8xi32>) -> vector<8xi32>311  %4 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %1)312  ret void313}314; CHECK-LABEL:  llvm.func @ctlz_test315define void @ctlz_test(i32 %0, <8 x i32> %1) {316  ; CHECK:   "llvm.intr.ctlz"(%{{.*}}) <{is_zero_poison = false}> : (i32) -> i32317  %3 = call i32 @llvm.ctlz.i32(i32 %0, i1 false)318  ; CHECK:   "llvm.intr.ctlz"(%{{.*}}) <{is_zero_poison = false}> : (vector<8xi32>) -> vector<8xi32>319  %4 = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %1, i1 false)320  ret void321}322; CHECK-LABEL:  llvm.func @cttz_test323define void @cttz_test(i32 %0, <8 x i32> %1) {324  ; CHECK:   "llvm.intr.cttz"(%{{.*}}) <{is_zero_poison = false}> : (i32) -> i32325  %3 = call i32 @llvm.cttz.i32(i32 %0, i1 false)326  ; CHECK:   "llvm.intr.cttz"(%{{.*}}) <{is_zero_poison = false}> : (vector<8xi32>) -> vector<8xi32>327  %4 = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %1, i1 false)328  ret void329}330; CHECK-LABEL:  llvm.func @abs_test331define void @abs_test(i32 %0, <8 x i32> %1) {332  ; CHECK:   "llvm.intr.abs"(%{{.*}}) <{is_int_min_poison = false}> : (i32) -> i32333  %3 = call i32 @llvm.abs.i32(i32 %0, i1 false)334  ; CHECK:   "llvm.intr.abs"(%{{.*}}) <{is_int_min_poison = true}> : (vector<8xi32>) -> vector<8xi32>335  %4 = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %1, i1 true)336  ret void337}338 339; CHECK-LABEL:  llvm.func @ctpop_test340define void @ctpop_test(i32 %0, <8 x i32> %1) {341  ; CHECK:   llvm.intr.ctpop(%{{.*}}) : (i32) -> i32342  %3 = call i32 @llvm.ctpop.i32(i32 %0)343  ; CHECK:   llvm.intr.ctpop(%{{.*}}) : (vector<8xi32>) -> vector<8xi32>344  %4 = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> %1)345  ret void346}347 348; CHECK-LABEL:  llvm.func @fshl_test349define void @fshl_test(i32 %0, i32 %1, i32 %2, <8 x i32> %3, <8 x i32> %4, <8 x i32> %5) {350  ; CHECK:   llvm.intr.fshl(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, i32, i32) -> i32351  %7 = call i32 @llvm.fshl.i32(i32 %0, i32 %1, i32 %2)352  ; CHECK:   llvm.intr.fshl(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi32>) -> vector<8xi32>353  %8 = call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %3, <8 x i32> %4, <8 x i32> %5)354  ret void355}356 357; CHECK-LABEL:  llvm.func @fshr_test358define void @fshr_test(i32 %0, i32 %1, i32 %2, <8 x i32> %3, <8 x i32> %4, <8 x i32> %5) {359  ; CHECK:   llvm.intr.fshr(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, i32, i32) -> i32360  %7 = call i32 @llvm.fshr.i32(i32 %0, i32 %1, i32 %2)361  ; CHECK:   llvm.intr.fshr(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi32>) -> vector<8xi32>362  %8 = call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %3, <8 x i32> %4, <8 x i32> %5)363  ret void364}365 366; CHECK-LABEL:  llvm.func @maximum_test367define void @maximum_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {368  ; CHECK:   llvm.intr.maximum(%{{.*}}, %{{.*}}) : (f32, f32) -> f32369  %5 = call float @llvm.maximum.f32(float %0, float %1)370  ; CHECK:   llvm.intr.maximum(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>371  %6 = call <8 x float> @llvm.maximum.v8f32(<8 x float> %2, <8 x float> %3)372  ret void373}374 375; CHECK-LABEL:    llvm.func @minimum_test376define void @minimum_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {377  ; CHECK:   llvm.intr.minimum(%{{.*}}, %{{.*}}) : (f32, f32) -> f32378  %5 = call float @llvm.minimum.f32(float %0, float %1)379  ; CHECK:   llvm.intr.minimum(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>380  %6 = call <8 x float> @llvm.minimum.v8f32(<8 x float> %2, <8 x float> %3)381  ret void382}383 384; CHECK-LABEL:  llvm.func @maxnum_test385define void @maxnum_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {386  ; CHECK:   llvm.intr.maxnum(%{{.*}}, %{{.*}}) : (f32, f32) -> f32387  %5 = call float @llvm.maxnum.f32(float %0, float %1)388  ; CHECK:   llvm.intr.maxnum(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>389  %6 = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %2, <8 x float> %3)390  ret void391}392 393; CHECK-LABEL:  llvm.func @minnum_test394define void @minnum_test(float %0, float %1, <8 x float> %2, <8 x float> %3) {395  ; CHECK:   llvm.intr.minnum(%{{.*}}, %{{.*}}) : (f32, f32) -> f32396  %5 = call float @llvm.minnum.f32(float %0, float %1)397  ; CHECK:   llvm.intr.minnum(%{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>398  %6 = call <8 x float> @llvm.minnum.v8f32(<8 x float> %2, <8 x float> %3)399  ret void400}401 402; CHECK-LABEL:  llvm.func @smax_test403define void @smax_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {404  ; CHECK:  llvm.intr.smax(%{{.*}}, %{{.*}}) : (i32, i32) -> i32405  %5 = call i32 @llvm.smax.i32(i32 %0, i32 %1)406  ; CHECK:  llvm.intr.smax(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>407  %6 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %2, <8 x i32> %3)408  ret void409}410 411; CHECK-LABEL:  llvm.func @smin_test412define void @smin_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {413  ; CHECK:   llvm.intr.smin(%{{.*}}, %{{.*}}) : (i32, i32) -> i32414  %5 = call i32 @llvm.smin.i32(i32 %0, i32 %1)415  ; CHECK:   llvm.intr.smin(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>416  %6 = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %2, <8 x i32> %3)417  ret void418}419 420; CHECK-LABEL:  llvm.func @umax_test421define void @umax_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {422  ; CHECK:   llvm.intr.umax(%{{.*}}, %{{.*}}) : (i32, i32) -> i32423  %5 = call i32 @llvm.umax.i32(i32 %0, i32 %1)424  ; CHECK:   llvm.intr.umax(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>425  %6 = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %2, <8 x i32> %3)426  ret void427}428 429; CHECK-LABEL:  llvm.func @umin_test430define void @umin_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {431  ; CHECK:   llvm.intr.umin(%{{.*}}, %{{.*}}) : (i32, i32) -> i32432  %5 = call i32 @llvm.umin.i32(i32 %0, i32 %1)433  ; CHECK:   llvm.intr.umin(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>434  %6 = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %2, <8 x i32> %3)435  ret void436}437 438; CHECK-LABEL:  llvm.func @vector_reductions439define void @vector_reductions(float %0, <8 x float> %1, <8 x i32> %2) {440  ; CHECK: "llvm.intr.vector.reduce.add"(%{{.*}}) : (vector<8xi32>) -> i32441  %4 = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %2)442  ; CHECK: "llvm.intr.vector.reduce.and"(%{{.*}}) : (vector<8xi32>) -> i32443  %5 = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> %2)444  ; CHECK: llvm.intr.vector.reduce.fmax(%{{.*}}) : (vector<8xf32>) -> f32445  %6 = call float @llvm.vector.reduce.fmax.v8f32(<8 x float> %1)446  ; CHECK: llvm.intr.vector.reduce.fmin(%{{.*}}) : (vector<8xf32>) -> f32447  %7 = call float @llvm.vector.reduce.fmin.v8f32(<8 x float> %1)448  ; CHECK: "llvm.intr.vector.reduce.mul"(%{{.*}}) : (vector<8xi32>) -> i32449  %8 = call i32 @llvm.vector.reduce.mul.v8i32(<8 x i32> %2)450  ; CHECK: "llvm.intr.vector.reduce.or"(%{{.*}}) : (vector<8xi32>) -> i32451  %9 = call i32 @llvm.vector.reduce.or.v8i32(<8 x i32> %2)452  ; CHECK: "llvm.intr.vector.reduce.smax"(%{{.*}}) : (vector<8xi32>) -> i32453  %10 = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> %2)454  ; CHECK: "llvm.intr.vector.reduce.smin"(%{{.*}}) : (vector<8xi32>) -> i32455  %11 = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> %2)456  ; CHECK: "llvm.intr.vector.reduce.umax"(%{{.*}}) : (vector<8xi32>) -> i32457  %12 = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> %2)458  ; CHECK: "llvm.intr.vector.reduce.umin"(%{{.*}}) : (vector<8xi32>) -> i32459  %13 = call i32 @llvm.vector.reduce.umin.v8i32(<8 x i32> %2)460  ; CHECK: "llvm.intr.vector.reduce.fadd"(%{{.*}}, %{{.*}}) <{fastmathFlags = #llvm.fastmath<none>}> : (f32, vector<8xf32>) -> f32461  %14 = call float @llvm.vector.reduce.fadd.v8f32(float %0, <8 x float> %1)462  ; CHECK: "llvm.intr.vector.reduce.fmul"(%{{.*}}, %{{.*}}) <{fastmathFlags = #llvm.fastmath<none>}> : (f32, vector<8xf32>) -> f32463  %15 = call float @llvm.vector.reduce.fmul.v8f32(float %0, <8 x float> %1)464  ; CHECK: "llvm.intr.vector.reduce.fadd"(%{{.*}}, %{{.*}}) <{fastmathFlags = #llvm.fastmath<reassoc>}> : (f32, vector<8xf32>) -> f32465  %16 = call reassoc float @llvm.vector.reduce.fadd.v8f32(float %0, <8 x float> %1)466  ; CHECK: "llvm.intr.vector.reduce.fmul"(%{{.*}}, %{{.*}}) <{fastmathFlags = #llvm.fastmath<reassoc>}> : (f32, vector<8xf32>) -> f32467  %17 = call reassoc float @llvm.vector.reduce.fmul.v8f32(float %0, <8 x float> %1)468  ; CHECK:  "llvm.intr.vector.reduce.xor"(%{{.*}}) : (vector<8xi32>) -> i32469  %18 = call i32 @llvm.vector.reduce.xor.v8i32(<8 x i32> %2)470  ; CHECK: llvm.intr.vector.reduce.fmaximum(%{{.*}}) : (vector<8xf32>) -> f32471  %19 = call float @llvm.vector.reduce.fmaximum.v8f32(<8 x float> %1)472  ; CHECK: llvm.intr.vector.reduce.fminimum(%{{.*}}) : (vector<8xf32>) -> f32473  %20 = call float @llvm.vector.reduce.fminimum.v8f32(<8 x float> %1)474  ret void475}476 477; CHECK-LABEL: @matrix_intrinsics478; CHECK-SAME:  %[[VEC1:[a-zA-Z0-9]+]]479; CHECK-SAME:  %[[VEC2:[a-zA-Z0-9]+]]480; CHECK-SAME:  %[[PTR:[a-zA-Z0-9]+]]481; CHECK-SAME:  %[[STRIDE:[a-zA-Z0-9]+]]482define void @matrix_intrinsics(<64 x float> %vec1, <48 x float> %vec2, ptr %ptr, i64 %stride) {483  ; CHECK:  llvm.intr.matrix.multiply %[[VEC1]], %[[VEC2]]484  ; CHECK-SAME:  {lhs_columns = 16 : i32, lhs_rows = 4 : i32, rhs_columns = 3 : i32}485  %1 = call <12 x float> @llvm.matrix.multiply.v12f32.v64f32.v48f32(<64 x float> %vec1, <48 x float> %vec2, i32 4, i32 16, i32 3)486  ; CHECK:  llvm.intr.matrix.transpose %[[VEC2]]487  ; CHECK-SAME:  {columns = 16 : i32, rows = 3 : i32}488  %2 = call <48 x float> @llvm.matrix.transpose.v48f32(<48 x float> %vec2, i32 3, i32 16)489  ; CHECK:  %[[VAL1:.+]] = llvm.intr.matrix.column.major.load %[[PTR]], <stride = %[[STRIDE]]>490  ; CHECK-SAME:  {columns = 16 : i32, isVolatile = false, rows = 3 : i32}491  %3 = call <48 x float> @llvm.matrix.column.major.load.v48f32.i64(ptr align 4 %ptr, i64 %stride, i1 false, i32 3, i32 16)492  ; CHECK:  llvm.intr.matrix.column.major.store %[[VAL1]], %[[PTR]], <stride = %[[STRIDE]]>493  ; CHECK-SAME:  {columns = 16 : i32, isVolatile = true, rows = 3 : i32}494  call void @llvm.matrix.column.major.store.v48f32.i64(<48 x float> %3, ptr align 4 %ptr, i64 %stride, i1 true, i32 3, i32 16)495  ret void496}497 498; CHECK-LABEL: llvm.func @get_active_lane_mask499define <7 x i1> @get_active_lane_mask(i64 %0, i64 %1) {500  ; CHECK: llvm.intr.get.active.lane.mask %{{.*}}, %{{.*}} : i64, i64 to vector<7xi1>501  %3 = call <7 x i1> @llvm.get.active.lane.mask.v7i1.i64(i64 %0, i64 %1)502  ret <7 x i1> %3503}504 505; CHECK-LABEL: @masked_load_store_intrinsics506; CHECK-SAME:  %[[VEC:[a-zA-Z0-9]+]]507; CHECK-SAME:  %[[MASK:[a-zA-Z0-9]+]]508define void @masked_load_store_intrinsics(ptr %vec, <7 x i1> %mask) {509  ; CHECK:  %[[UNDEF:.+]] = llvm.mlir.undef510  ; CHECK:  %[[VAL1:.+]] = llvm.intr.masked.load %[[VEC]], %[[MASK]], %[[UNDEF]] {alignment = 1 : i32}511  ; CHECK-SAME:  (!llvm.ptr, vector<7xi1>, vector<7xf32>) -> vector<7xf32>512  %1 = call <7 x float> @llvm.masked.load.v7f32.p0(ptr %vec, i32 1, <7 x i1> %mask, <7 x float> undef)513  ; CHECK:  %[[VAL2:.+]] = llvm.intr.masked.load %[[VEC]], %[[MASK]], %[[VAL1]] {alignment = 4 : i32}514  %2 = call <7 x float> @llvm.masked.load.v7f32.p0(ptr %vec, i32 4, <7 x i1> %mask, <7 x float> %1)515  ; CHECK:  %[[VAL3:.+]] = llvm.intr.masked.load %[[VEC]], %[[MASK]], %[[VAL1]] {alignment = 4 : i32, nontemporal}516  %3 = call <7 x float> @llvm.masked.load.v7f32.p0(ptr %vec, i32 4, <7 x i1> %mask, <7 x float> %1), !nontemporal !{i32 1}517  ; CHECK:  llvm.intr.masked.store %[[VAL2]], %[[VEC]], %[[MASK]] {alignment = 8 : i32}518  ; CHECK-SAME:  vector<7xf32>, vector<7xi1> into !llvm.ptr519  call void @llvm.masked.store.v7f32.p0(<7 x float> %2, ptr %vec, i32 8, <7 x i1> %mask)520  ret void521}522 523; CHECK-LABEL: @masked_gather_scatter_intrinsics524; CHECK-SAME:  %[[VEC:[a-zA-Z0-9]+]]525; CHECK-SAME:  %[[MASK:[a-zA-Z0-9]+]]526define void @masked_gather_scatter_intrinsics(<7 x ptr> %vec, <7 x i1> %mask) {527  ; CHECK:  %[[UNDEF:.+]] = llvm.mlir.undef528  ; CHECK:  %[[VAL1:.+]] = llvm.intr.masked.gather %[[VEC]], %[[MASK]], %[[UNDEF]] {alignment = 1 : i32}529  ; CHECK-SAME:  (vector<7x!llvm.ptr>, vector<7xi1>, vector<7xf32>) -> vector<7xf32>530  %1 = call <7 x float> @llvm.masked.gather.v7f32.v7p0(<7 x ptr> %vec, i32 1, <7 x i1> %mask, <7 x float> undef)531  ; CHECK:  %[[VAL2:.+]] = llvm.intr.masked.gather %[[VEC]], %[[MASK]], %[[VAL1]] {alignment = 4 : i32}532  %2 = call <7 x float> @llvm.masked.gather.v7f32.v7p0(<7 x ptr> %vec, i32 4, <7 x i1> %mask, <7 x float> %1)533  ; CHECK:  llvm.intr.masked.scatter %[[VAL2]], %[[VEC]], %[[MASK]] {alignment = 8 : i32}534  ; CHECK-SAME:  vector<7xf32>, vector<7xi1> into vector<7x!llvm.ptr>535  call void @llvm.masked.scatter.v7f32.v7p0(<7 x float> %2, <7 x ptr> %vec, i32 8, <7 x i1> %mask)536  ret void537}538 539; CHECK-LABEL:  llvm.func @masked_expand_compress_intrinsics540define void @masked_expand_compress_intrinsics(ptr %0, <7 x i1> %1, <7 x float> %2) {541  ; CHECK: %[[val1:.+]] = "llvm.intr.masked.expandload"(%{{.*}}, %{{.*}}, %{{.*}}) : (!llvm.ptr, vector<7xi1>, vector<7xf32>) -> vector<7xf32>542  %4 = call <7 x float> @llvm.masked.expandload.v7f32(ptr %0, <7 x i1> %1, <7 x float> %2)543  ; CHECK: "llvm.intr.masked.compressstore"(%[[val1]], %{{.*}}, %{{.*}}) : (vector<7xf32>, !llvm.ptr, vector<7xi1>) -> ()544  call void @llvm.masked.compressstore.v7f32(<7 x float> %4, ptr %0, <7 x i1> %1)545  ret void546}547 548; CHECK-LABEL:  llvm.func @masked_expand_compress_intrinsics_with_alignment549define void @masked_expand_compress_intrinsics_with_alignment(ptr %0, <7 x i1> %1, <7 x float> %2) {550  ; CHECK: %[[val1:.+]] = "llvm.intr.masked.expandload"(%{{.*}}, %{{.*}}, %{{.*}}) <{arg_attrs = [{llvm.align = 8 : i64}, {}, {}]}> : (!llvm.ptr, vector<7xi1>, vector<7xf32>) -> vector<7xf32>551  %4 = call <7 x float> @llvm.masked.expandload.v7f32(ptr align 8 %0, <7 x i1> %1, <7 x float> %2)552  ; CHECK: "llvm.intr.masked.compressstore"(%[[val1]], %{{.*}}, %{{.*}}) <{arg_attrs = [{}, {llvm.align = 8 : i64}, {}]}> : (vector<7xf32>, !llvm.ptr, vector<7xi1>) -> ()553  call void @llvm.masked.compressstore.v7f32(<7 x float> %4, ptr align 8 %0, <7 x i1> %1)554  ret void555}556 557; CHECK-LABEL:  llvm.func @annotate_intrinsics558define void @annotate_intrinsics(ptr %var, ptr %ptr, i16 %int, ptr %annotation, ptr %fileName, i32 %line, ptr %args) {559  ; CHECK: "llvm.intr.var.annotation"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (!llvm.ptr, !llvm.ptr, !llvm.ptr, i32, !llvm.ptr) -> ()560  call void @llvm.var.annotation.p0.p0(ptr %var, ptr %annotation, ptr %fileName, i32 %line, ptr %args)561  ; CHECK: %{{.*}} = "llvm.intr.ptr.annotation"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (!llvm.ptr, !llvm.ptr, !llvm.ptr, i32, !llvm.ptr) -> !llvm.ptr562  %1 = call ptr @llvm.ptr.annotation.p0.p0(ptr %ptr, ptr %annotation, ptr %fileName, i32 %line, ptr %args)563  ; CHECK: %{{.*}} = "llvm.intr.annotation"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i16, !llvm.ptr, !llvm.ptr, i32) -> i16564  %2 = call i16 @llvm.annotation.i16.p0(i16 %int, ptr %annotation, ptr %fileName, i32 %line)565  ret void566}567 568; CHECK-LABEL:  llvm.func @trap_intrinsics569define void @trap_intrinsics() {570  ; CHECK: llvm.intr.trap571  call void @llvm.trap()572  ; CHECK: llvm.intr.debugtrap573  call void @llvm.debugtrap()574  ; CHECK: llvm.intr.ubsantrap <{failureKind = 1 : i8}>575  call void @llvm.ubsantrap(i8 1)576  ret void577}578 579; CHECK-LABEL:  llvm.func @memcpy_test580define void @memcpy_test(i32 %0, ptr %1, ptr %2) {581  ; CHECK: "llvm.intr.memcpy"(%{{.*}}, %{{.*}}, %{{.*}}) <{arg_attrs = [{llvm.align = 4 : i64}, {llvm.align = 8 : i64}, {}], isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()582  call void @llvm.memcpy.p0.p0.i32(ptr align 4 %1, ptr align 8 %2, i32 %0, i1 false)583  ; CHECK: "llvm.intr.memcpy.inline"(%{{.*}}, %{{.*}}) <{arg_attrs = [{}, {llvm.align = 4 : i64}], isVolatile = false, len = 10 : i64}> : (!llvm.ptr, !llvm.ptr) -> ()584  call void @llvm.memcpy.inline.p0.p0.i64(ptr %1, ptr align 4 %2, i64 10, i1 false)585  ; CHECK: "llvm.intr.memcpy.inline"(%{{.*}}, %{{.*}}) <{isVolatile = false, len = 10 : i32}> : (!llvm.ptr, !llvm.ptr) -> ()586  call void @llvm.memcpy.inline.p0.p0.i32(ptr %1, ptr %2, i32 10, i1 false)587  ret void588}589 590; CHECK-LABEL:  llvm.func @memmove_test591define void @memmove_test(i32 %0, ptr %1, ptr %2) {592  ; CHECK: "llvm.intr.memmove"(%{{.*}}, %{{.*}}, %{{.*}}) <{arg_attrs = [{llvm.align = 16 : i64}, {}, {}], isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()593  call void @llvm.memmove.p0.p0.i32(ptr align 16 %1, ptr %2, i32 %0, i1 false)594  ret void595}596 597; CHECK-LABEL:  llvm.func @memset_test598define void @memset_test(i32 %0, ptr %1, i8 %2) {599  ; CHECK: "llvm.intr.memset"(%{{.*}}, %{{.*}}, %{{.*}}) <{arg_attrs = [{llvm.align = 2 : i64}, {}, {}], isVolatile = false}> : (!llvm.ptr, i8, i32) -> ()600  call void @llvm.memset.p0.i32(ptr align 2 %1, i8 %2, i32 %0, i1 false)601  ; CHECK: "llvm.intr.memset.inline"(%{{.*}}, %{{.*}}) <{arg_attrs = [{llvm.align = 4 : i64}, {}], isVolatile = false, len = 10 : i64}> : (!llvm.ptr, i8) -> ()602  call void @llvm.memset.inline.p0.i64(ptr align 4 %1, i8 %2, i64 10, i1 false)603  ; CHECK: "llvm.intr.memset.inline"(%{{.*}}, %{{.*}}) <{isVolatile = false, len = 10 : i32}> : (!llvm.ptr, i8) -> ()604  call void @llvm.memset.inline.p0.i32(ptr %1, i8 %2, i32 10, i1 false)605  ret void606}607 608; CHECK-LABEL:  llvm.func @sadd_with_overflow_test609define void @sadd_with_overflow_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {610  ; CHECK: "llvm.intr.sadd.with.overflow"(%{{.*}}, %{{.*}}) : (i32, i32) -> !llvm.struct<(i32, i1)>611  %5 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %0, i32 %1)612  ; CHECK: "llvm.intr.sadd.with.overflow"(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> !llvm.struct<(vector<8xi32>, vector<8xi1>)>613  %6 = call { <8 x i32>, <8 x i1> } @llvm.sadd.with.overflow.v8i32(<8 x i32> %2, <8 x i32> %3)614  ret void615}616 617; CHECK-LABEL:  llvm.func @uadd_with_overflow_test618define void @uadd_with_overflow_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {619  ; CHECK: "llvm.intr.uadd.with.overflow"(%{{.*}}, %{{.*}}) : (i32, i32) -> !llvm.struct<(i32, i1)>620  %5 = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %0, i32 %1)621  ; CHECK: "llvm.intr.uadd.with.overflow"(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> !llvm.struct<(vector<8xi32>, vector<8xi1>)>622  %6 = call { <8 x i32>, <8 x i1> } @llvm.uadd.with.overflow.v8i32(<8 x i32> %2, <8 x i32> %3)623  ret void624}625 626; CHECK-LABEL:  llvm.func @ssub_with_overflow_test627define void @ssub_with_overflow_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {628  ; CHECK: "llvm.intr.ssub.with.overflow"(%{{.*}}, %{{.*}}) : (i32, i32) -> !llvm.struct<(i32, i1)>629  %5 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %0, i32 %1)630  ; CHECK: "llvm.intr.ssub.with.overflow"(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> !llvm.struct<(vector<8xi32>, vector<8xi1>)>631  %6 = call { <8 x i32>, <8 x i1> } @llvm.ssub.with.overflow.v8i32(<8 x i32> %2, <8 x i32> %3)632  ret void633}634 635; CHECK-LABEL:  llvm.func @usub_with_overflow_test636define void @usub_with_overflow_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {637  ; CHECK: "llvm.intr.usub.with.overflow"(%{{.*}}, %{{.*}}) : (i32, i32) -> !llvm.struct<(i32, i1)>638  %5 = call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %0, i32 %1)639  ; CHECK: "llvm.intr.usub.with.overflow"(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> !llvm.struct<(vector<8xi32>, vector<8xi1>)>640  %6 = call { <8 x i32>, <8 x i1> } @llvm.usub.with.overflow.v8i32(<8 x i32> %2, <8 x i32> %3)641  ret void642}643 644; CHECK-LABEL:  llvm.func @smul_with_overflow_test645define void @smul_with_overflow_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {646  ; CHECK: "llvm.intr.smul.with.overflow"(%{{.*}}, %{{.*}}) : (i32, i32) -> !llvm.struct<(i32, i1)>647  %5 = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %0, i32 %1)648  ; CHECK: "llvm.intr.smul.with.overflow"(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> !llvm.struct<(vector<8xi32>, vector<8xi1>)>649  %6 = call { <8 x i32>, <8 x i1> } @llvm.smul.with.overflow.v8i32(<8 x i32> %2, <8 x i32> %3)650  ret void651}652 653; CHECK-LABEL:  llvm.func @umul_with_overflow_test654define void @umul_with_overflow_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {655  ; CHECK: "llvm.intr.umul.with.overflow"(%{{.*}}, %{{.*}}) : (i32, i32) -> !llvm.struct<(i32, i1)>656  %5 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %0, i32 %1)657  ; CHECK: "llvm.intr.umul.with.overflow"(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> !llvm.struct<(vector<8xi32>, vector<8xi1>)>658  %6 = call { <8 x i32>, <8 x i1> } @llvm.umul.with.overflow.v8i32(<8 x i32> %2, <8 x i32> %3)659  ret void660}661 662; CHECK-LABEL:  llvm.func @sadd_sat_test663define void @sadd_sat_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {664  ; CHECK: llvm.intr.sadd.sat(%{{.*}}, %{{.*}}) : (i32, i32) -> i32665  %5 = call i32 @llvm.sadd.sat.i32(i32 %0, i32 %1)666  ; CHECK: llvm.intr.sadd.sat(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>667  %6 = call <8 x i32> @llvm.sadd.sat.v8i32(<8 x i32> %2, <8 x i32> %3)668  ret void669}670 671; CHECK-LABEL:  llvm.func @uadd_sat_test672define void @uadd_sat_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {673  ; CHECK: llvm.intr.uadd.sat(%{{.*}}, %{{.*}}) : (i32, i32) -> i32674  %5 = call i32 @llvm.uadd.sat.i32(i32 %0, i32 %1)675  ; CHECK: llvm.intr.uadd.sat(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>676  %6 = call <8 x i32> @llvm.uadd.sat.v8i32(<8 x i32> %2, <8 x i32> %3)677  ret void678}679 680; CHECK-LABEL:  llvm.func @ssub_sat_test681define void @ssub_sat_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {682  ; CHECK: llvm.intr.ssub.sat(%{{.*}}, %{{.*}}) : (i32, i32) -> i32683  %5 = call i32 @llvm.ssub.sat.i32(i32 %0, i32 %1)684  ; CHECK: llvm.intr.ssub.sat(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>685  %6 = call <8 x i32> @llvm.ssub.sat.v8i32(<8 x i32> %2, <8 x i32> %3)686  ret void687}688 689; CHECK-LABEL:  llvm.func @usub_sat_test690define void @usub_sat_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {691  ; CHECK: llvm.intr.usub.sat(%{{.*}}, %{{.*}}) : (i32, i32) -> i32692  %5 = call i32 @llvm.usub.sat.i32(i32 %0, i32 %1)693  ; CHECK: llvm.intr.usub.sat(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>694  %6 = call <8 x i32> @llvm.usub.sat.v8i32(<8 x i32> %2, <8 x i32> %3)695  ret void696}697 698; CHECK-LABEL:  llvm.func @sshl_sat_test699define void @sshl_sat_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {700  ; CHECK: llvm.intr.sshl.sat(%{{.*}}, %{{.*}}) : (i32, i32) -> i32701  %5 = call i32 @llvm.sshl.sat.i32(i32 %0, i32 %1)702  ; CHECK: llvm.intr.sshl.sat(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>703  %6 = call <8 x i32> @llvm.sshl.sat.v8i32(<8 x i32> %2, <8 x i32> %3)704  ret void705}706 707; CHECK-LABEL:  llvm.func @ushl_sat_test708define void @ushl_sat_test(i32 %0, i32 %1, <8 x i32> %2, <8 x i32> %3) {709  ; CHECK: llvm.intr.ushl.sat(%{{.*}}, %{{.*}}) : (i32, i32) -> i32710  %5 = call i32 @llvm.ushl.sat.i32(i32 %0, i32 %1)711  ; CHECK: llvm.intr.ushl.sat(%{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>) -> vector<8xi32>712  %6 = call <8 x i32> @llvm.ushl.sat.v8i32(<8 x i32> %2, <8 x i32> %3)713  ret void714}715 716; CHECK-LABEL: llvm.func @va_intrinsics_test717define void @va_intrinsics_test(ptr %0, ptr %1, ...) {718; CHECK: llvm.intr.vastart %{{.*}}719  call void @llvm.va_start.p0(ptr %0)720; CHECK: llvm.intr.vacopy %{{.*}} to %{{.*}}721  call void @llvm.va_copy.p0(ptr %1, ptr %0)722; CHECK: llvm.intr.vaend %{{.*}}723  call void @llvm.va_end.p0(ptr %0)724  ret void725}726 727; CHECK-LABEL: @assume728; CHECK-SAME:  %[[TRUE:[a-zA-Z0-9]+]]729define void @assume(i1 %true) {730  ; CHECK:  llvm.intr.assume %[[TRUE]] : i1731  call void @llvm.assume(i1 %true)732  ret void733}734 735; CHECK-LABEL: @assume_with_opbundles736; CHECK-SAME:  %[[PTR:[a-zA-Z0-9]+]]737define void @assume_with_opbundles(ptr %p) {738  ; CHECK: %[[TRUE:.+]] = llvm.mlir.constant(true) : i1739  ; CHECK: %[[ALIGN:.+]] = llvm.mlir.constant(8 : i32) : i32740  ; CHECK:  llvm.intr.assume %[[TRUE]] ["align"(%[[PTR]], %[[ALIGN]] : !llvm.ptr, i32)] : i1741  call void @llvm.assume(i1 true) ["align"(ptr %p, i32 8)]742  ret void743}744 745; CHECK-LABEL: @is_constant746; CHECK-SAME:  %[[VAL:[a-zA-Z0-9]+]]747define void @is_constant(i32 %0) {748  ; CHECK:  "llvm.intr.is.constant"(%[[VAL]]) : (i32) -> i1749  %2 = call i1 @llvm.is.constant.i32(i32 %0)750  ret void751}752 753; CHECK-LABEL: @expect754; CHECK-SAME:  %[[VAL:[a-zA-Z0-9]+]]755define void @expect(i32 %0) {756  ; CHECK:  %[[EXP:.+]] = llvm.mlir.constant(42 : i32) : i32757  ; CHECK:  llvm.intr.expect %[[VAL]], %[[EXP]] : i32758  %2 = call i32 @llvm.expect.i32(i32 %0, i32 42)759  ret void760}761 762; CHECK-LABEL: @expect_with_probability763; CHECK-SAME:  %[[VAL:[a-zA-Z0-9]+]]764define void @expect_with_probability(i16 %0) {765  ; CHECK:  %[[EXP:.+]] = llvm.mlir.constant(42 : i16) : i16766  ; CHECK:  llvm.intr.expect.with.probability %[[VAL]], %[[EXP]], 5.000000e-01 : i16767  %2 = call i16 @llvm.expect.with.probability.i16(i16 %0, i16 42, double 0.5)768  ret void769}770 771@tls_var = dso_local thread_local global i32 0, align 4772 773; CHECK-LABEL: llvm.func @threadlocal_test774define void @threadlocal_test() {775  ; CHECK: "llvm.intr.threadlocal.address"(%{{.*}}) : (!llvm.ptr) -> !llvm.ptr776  %local = call ptr @llvm.threadlocal.address.p0(ptr @tls_var)777  ret void778}779 780; CHECK-LABEL:  llvm.func @coro_id781define void @coro_id(i32 %0, ptr %1) {782  ; CHECK: llvm.intr.coro.id %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : (i32, !llvm.ptr, !llvm.ptr, !llvm.ptr) -> !llvm.token783  %3 = call token @llvm.coro.id(i32 %0, ptr %1, ptr %1, ptr null)784  ret void785}786 787; CHECK-LABEL:  llvm.func @coro_begin788define void @coro_begin(i32 %0, ptr %1) {789  ; CHECK: llvm.intr.coro.id %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : (i32, !llvm.ptr, !llvm.ptr, !llvm.ptr) -> !llvm.token790  %3 = call token @llvm.coro.id(i32 %0, ptr %1, ptr %1, ptr null)791  ; CHECK: llvm.intr.coro.begin %{{.*}}, %{{.*}} : (!llvm.token, !llvm.ptr) -> !llvm.ptr792  %4 = call ptr @llvm.coro.begin(token %3, ptr %1)793  ret void794}795 796; CHECK-LABEL:  llvm.func @coro_size()797define void @coro_size() {798  ; CHECK: llvm.intr.coro.size : i64799  %1 = call i64 @llvm.coro.size.i64()800  ; CHECK: llvm.intr.coro.size : i32801  %2 = call i32 @llvm.coro.size.i32()802  ret void803}804; CHECK-LABEL:  llvm.func @coro_align()805define void @coro_align() {806  ; CHECK: llvm.intr.coro.align : i64807  %1 = call i64 @llvm.coro.align.i64()808  ; CHECK: llvm.intr.coro.align : i32809  %2 = call i32 @llvm.coro.align.i32()810  ret void811}812 813; CHECK-LABEL:  llvm.func @coro_save814define void @coro_save(ptr %0) {815  ; CHECK: llvm.intr.coro.save %{{.*}} : (!llvm.ptr) -> !llvm.token816  %2 = call token @llvm.coro.save(ptr %0)817  ret void818}819 820; CHECK-LABEL:  llvm.func @coro_suspend821define void @coro_suspend(i32 %0, i1 %1, ptr %2) {822  ; CHECK: llvm.intr.coro.id %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : (i32, !llvm.ptr, !llvm.ptr, !llvm.ptr) -> !llvm.token823  %4 = call token @llvm.coro.id(i32 %0, ptr %2, ptr %2, ptr null)824  ; CHECK: llvm.intr.coro.suspend %{{.*}}, %{{.*}} : i8825  %5 = call i8 @llvm.coro.suspend(token %4, i1 %1)826  ret void827}828 829; CHECK-LABEL:  llvm.func @coro_end830define void @coro_end(ptr %0, i1 %1) {831  ; CHECK:  llvm.intr.coro.end832  call void @llvm.coro.end(ptr %0, i1 %1, token none)833  ret void834}835 836; CHECK-LABEL:  llvm.func @coro_free837define void @coro_free(i32 %0, ptr %1) {838  ; CHECK: llvm.intr.coro.id %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : (i32, !llvm.ptr, !llvm.ptr, !llvm.ptr) -> !llvm.token839  %3 = call token @llvm.coro.id(i32 %0, ptr %1, ptr %1, ptr null)840  ; CHECK: llvm.intr.coro.free %{{.*}}, %{{.*}} : (!llvm.token, !llvm.ptr) -> !llvm.ptr841  %4 = call ptr @llvm.coro.free(token %3, ptr %1)842  ret void843}844 845; CHECK-LABEL:  llvm.func @coro_resume846define void @coro_resume(ptr %0) {847  ; CHECK: llvm.intr.coro.resume %{{.*}}848  call void @llvm.coro.resume(ptr %0)849  ret void850}851 852; CHECK-LABEL:  llvm.func @coro_promise853define void @coro_promise(ptr %0, i32 %1, i1 %2) {854  ; CHECK: llvm.intr.coro.promise %{{.*}}, %{{.*}}, %{{.*}} : (!llvm.ptr, i32, i1) -> !llvm.ptr855  %4 = call ptr @llvm.coro.promise(ptr %0, i32 %1, i1 %2)856  ret void857}858 859; CHECK-LABEL:  llvm.func @eh_typeid_for860define void @eh_typeid_for(ptr %0) {861  ; CHECK: llvm.intr.eh.typeid.for %{{.*}} : (!llvm.ptr) -> i32862  %2 = call i32 @llvm.eh.typeid.for.p0(ptr %0)863  ret void864}865 866; CHECK-LABEL:  llvm.func @stack_save() {867define void @stack_save() {868  ; CHECK: llvm.intr.stacksave : !llvm.ptr869  %1 = call ptr @llvm.stacksave.p0()870  ; CHECK: llvm.intr.stacksave : !llvm.ptr<1>871  %2 = call ptr addrspace(1) @llvm.stacksave.p1()872  ret void873}874 875; CHECK-LABEL:  llvm.func @stack_restore876define void @stack_restore(ptr %0, ptr addrspace(1) %1) {877  ; CHECK: llvm.intr.stackrestore %{{.*}} : !llvm.ptr878  call void @llvm.stackrestore.p0(ptr %0)879  ; CHECK: llvm.intr.stackrestore %{{.*}} : !llvm.ptr<1>880  call void @llvm.stackrestore.p1(ptr addrspace(1) %1)881  ret void882}883 884; CHECK-LABEL: llvm.func @lifetime885define void @lifetime() {886  %a = alloca [16 x i8]887  ; CHECK: llvm.intr.lifetime.start %{{.*}} : !llvm.ptr888  call void @llvm.lifetime.start.p0(ptr %a)889  ; CHECK: llvm.intr.lifetime.end %{{.*}} : !llvm.ptr890  call void @llvm.lifetime.end.p0(ptr %a)891  ret void892}893 894; CHECK-LABEL: llvm.func @invariant895define void @invariant(ptr %0) {896  ; CHECK: %[[START:.*]] = llvm.intr.invariant.start 16, %{{.*}} : !llvm.ptr897  %2 = call ptr @llvm.invariant.start.p0(i64 16, ptr %0)898  ; CHECK: llvm.intr.invariant.end %[[START]], 32, %{{.*}} : !llvm.ptr899  call void @llvm.invariant.end.p0(ptr %2, i64 32, ptr %0)900  ret void901}902 903; CHECK-LABEL: llvm.func @invariant_group904define void @invariant_group(ptr %0) {905  ; CHECK: %{{.+}} = llvm.intr.launder.invariant.group %{{.*}} : !llvm.ptr906  %2 = call ptr @llvm.launder.invariant.group.p0(ptr %0)907  ; CHECK: %{{.+}} = llvm.intr.strip.invariant.group %{{.*}} : !llvm.ptr908  %3 = call ptr @llvm.strip.invariant.group.p0(ptr %0)909  ret void910}911 912; CHECK-LABEL: llvm.func @vector_insert913define void @vector_insert(<vscale x 4 x float> %0, <4 x float> %1) {914  ; CHECK: llvm.intr.vector.insert %{{.*}}, %{{.*}}[4] : vector<4xf32> into vector<[4]xf32>915  %3 = call <vscale x 4 x float>  @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> %0, <4 x float> %1, i64 4);916  ret void917}918 919; CHECK-LABEL: llvm.func @vector_extract920define void @vector_extract(<vscale x 4 x float> %0) {921  ; llvm.intr.vector.extract %{{.*}}[0] : vector<4xf32> from !llvm.vec<? x 4 x  f32>922  %2 = call <4 x float> @llvm.vector.extract.v4f32.nxv4f32(<vscale x 4 x float> %0, i64 0);923  ret void924}925 926; CHECK-LABEL: llvm.func @vector_deinterleave2927define void @vector_deinterleave2(<4 x double> %0, <vscale x 8 x i32> %1) {928  ; CHECK: "llvm.intr.vector.deinterleave2"(%{{.*}}) : (vector<4xf64>) -> !llvm.struct<(vector<2xf64>, vector<2xf64>)>929  %3 = call { <2 x double>, <2 x double> } @llvm.vector.deinterleave2.v4f64(<4 x double> %0);930  ; CHECK: "llvm.intr.vector.deinterleave2"(%{{.*}}) : (vector<[8]xi32>) -> !llvm.struct<(vector<[4]xi32>, vector<[4]xi32>)>931  %4 = call { <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.vector.deinterleave2.nxv8i32(<vscale x 8 x i32> %1);932  ret void933}934 935; CHECK-LABEL:  llvm.func @vector_predication_intrinsics936define void @vector_predication_intrinsics(<8 x i32> %0, <8 x i32> %1, <8 x float> %2, <8 x float> %3, <8 x i64> %4, <8 x double> %5, <8 x ptr> %6, i32 %7, float %8, ptr %9, ptr %10, <8 x i1> %11, i32 %12) {937  ; CHECK: "llvm.intr.vp.add"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>938  %14 = call <8 x i32> @llvm.vp.add.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)939  ; CHECK: "llvm.intr.vp.sub"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>940  %15 = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)941  ; CHECK: "llvm.intr.vp.mul"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>942  %16 = call <8 x i32> @llvm.vp.mul.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)943  ; CHECK: "llvm.intr.vp.sdiv"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>944  %17 = call <8 x i32> @llvm.vp.sdiv.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)945  ; CHECK: "llvm.intr.vp.udiv"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>946  %18 = call <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)947  ; CHECK: "llvm.intr.vp.srem"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>948  %19 = call <8 x i32> @llvm.vp.srem.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)949  ; CHECK: "llvm.intr.vp.urem"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>950  %20 = call <8 x i32> @llvm.vp.urem.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)951  ; CHECK: "llvm.intr.vp.ashr"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>952  %21 = call <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)953  ; CHECK: "llvm.intr.vp.lshr"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>954  %22 = call <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)955  ; CHECK: "llvm.intr.vp.shl"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>956  %23 = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)957  ; CHECK: "llvm.intr.vp.or"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>958  %24 = call <8 x i32> @llvm.vp.or.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)959  ; CHECK: "llvm.intr.vp.and"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>960  %25 = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)961  ; CHECK: "llvm.intr.vp.xor"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>962  %26 = call <8 x i32> @llvm.vp.xor.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)963  ; CHECK: "llvm.intr.vp.fadd"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>964  %27 = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %2, <8 x float> %3, <8 x i1> %11, i32 %12)965  ; CHECK: "llvm.intr.vp.fsub"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>966  %28 = call <8 x float> @llvm.vp.fsub.v8f32(<8 x float> %2, <8 x float> %3, <8 x i1> %11, i32 %12)967  ; CHECK: "llvm.intr.vp.fmul"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>968  %29 = call <8 x float> @llvm.vp.fmul.v8f32(<8 x float> %2, <8 x float> %3, <8 x i1> %11, i32 %12)969  ; CHECK: "llvm.intr.vp.fdiv"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>970  %30 = call <8 x float> @llvm.vp.fdiv.v8f32(<8 x float> %2, <8 x float> %3, <8 x i1> %11, i32 %12)971  ; CHECK: "llvm.intr.vp.frem"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>972  %31 = call <8 x float> @llvm.vp.frem.v8f32(<8 x float> %2, <8 x float> %3, <8 x i1> %11, i32 %12)973  ; CHECK: "llvm.intr.vp.fneg"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>974  %32 = call <8 x float> @llvm.vp.fneg.v8f32(<8 x float> %2, <8 x i1> %11, i32 %12)975  ; CHECK: "llvm.intr.vp.fma"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>976  %33 = call <8 x float> @llvm.vp.fma.v8f32(<8 x float> %2, <8 x float> %3, <8 x float> %3, <8 x i1> %11, i32 %12)977  ; CHECK: "llvm.intr.vp.reduce.add"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32978  %34 = call i32 @llvm.vp.reduce.add.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)979  ; CHECK: "llvm.intr.vp.reduce.mul"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32980  %35 = call i32 @llvm.vp.reduce.mul.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)981  ; CHECK: "llvm.intr.vp.reduce.and"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32982  %36 = call i32 @llvm.vp.reduce.and.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)983  ; CHECK: "llvm.intr.vp.reduce.or"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32984  %37 = call i32 @llvm.vp.reduce.or.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)985  ; CHECK: "llvm.intr.vp.reduce.xor"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32986  %38 = call i32 @llvm.vp.reduce.xor.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)987  ; CHECK: "llvm.intr.vp.reduce.smax"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32988  %39 = call i32 @llvm.vp.reduce.smax.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)989  ; CHECK: "llvm.intr.vp.reduce.smin"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32990  %40 = call i32 @llvm.vp.reduce.smin.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)991  ; CHECK: "llvm.intr.vp.reduce.umax"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32992  %41 = call i32 @llvm.vp.reduce.umax.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)993  ; CHECK: "llvm.intr.vp.reduce.umin"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (i32, vector<8xi32>, vector<8xi1>, i32) -> i32994  %42 = call i32 @llvm.vp.reduce.umin.v8i32(i32 %7, <8 x i32> %0, <8 x i1> %11, i32 %12)995  ; CHECK: "llvm.intr.vp.reduce.fadd"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (f32, vector<8xf32>, vector<8xi1>, i32) -> f32996  %43 = call float @llvm.vp.reduce.fadd.v8f32(float %8, <8 x float> %2, <8 x i1> %11, i32 %12)997  ; CHECK: "llvm.intr.vp.reduce.fmul"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (f32, vector<8xf32>, vector<8xi1>, i32) -> f32998  %44 = call float @llvm.vp.reduce.fmul.v8f32(float %8, <8 x float> %2, <8 x i1> %11, i32 %12)999  ; CHECK: "llvm.intr.vp.reduce.fmax"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (f32, vector<8xf32>, vector<8xi1>, i32) -> f321000  %45 = call float @llvm.vp.reduce.fmax.v8f32(float %8, <8 x float> %2, <8 x i1> %11, i32 %12)1001  ; CHECK: "llvm.intr.vp.reduce.fmin"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (f32, vector<8xf32>, vector<8xi1>, i32) -> f321002  %46 = call float @llvm.vp.reduce.fmin.v8f32(float %8, <8 x float> %2, <8 x i1> %11, i32 %12)1003  ; CHECK: "llvm.intr.vp.select"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi1>, vector<8xi32>, vector<8xi32>, i32) -> vector<8xi32>1004  %47 = call <8 x i32> @llvm.vp.select.v8i32(<8 x i1> %11, <8 x i32> %0, <8 x i32> %1, i32 %12)1005  ; CHECK: "llvm.intr.vp.merge"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi1>, vector<8xi32>, vector<8xi32>, i32) -> vector<8xi32>1006  %48 = call <8 x i32> @llvm.vp.merge.v8i32(<8 x i1> %11, <8 x i32> %0, <8 x i32> %1, i32 %12)1007  ; CHECK: "llvm.intr.vp.store"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, !llvm.ptr, vector<8xi1>, i32) -> ()1008  call void @llvm.vp.store.v8i32.p0(<8 x i32> %0, ptr %9, <8 x i1> %11, i32 %12)1009  ; CHECK: "llvm.intr.vp.load"(%{{.*}}, %{{.*}}, %{{.*}}) : (!llvm.ptr, vector<8xi1>, i32) -> vector<8xi32>1010  %49 = call <8 x i32> @llvm.vp.load.v8i32.p0(ptr %9, <8 x i1> %11, i32 %12)1011  ; CHECK: "llvm.intr.experimental.vp.strided.store"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, !llvm.ptr, i32, vector<8xi1>, i32) -> ()1012  call void @llvm.experimental.vp.strided.store.v8i32.p0.i32(<8 x i32> %0, ptr %9, i32 %7, <8 x i1> %11, i32 %12)1013  ; CHECK: "llvm.intr.experimental.vp.strided.load"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (!llvm.ptr, i32, vector<8xi1>, i32) -> vector<8xi32>1014  %50 = call <8 x i32> @llvm.experimental.vp.strided.load.v8i32.p0.i32(ptr %9, i32 %7, <8 x i1> %11, i32 %12)1015  ; CHECK: "llvm.intr.vp.trunc"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi64>, vector<8xi1>, i32) -> vector<8xi32>1016  %51 = call <8 x i32> @llvm.vp.trunc.v8i32.v8i64(<8 x i64> %4, <8 x i1> %11, i32 %12)1017  ; CHECK: "llvm.intr.vp.zext"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi1>, i32) -> vector<8xi64>1018  %52 = call <8 x i64> @llvm.vp.zext.v8i64.v8i32(<8 x i32> %0, <8 x i1> %11, i32 %12)1019  ; CHECK: "llvm.intr.vp.sext"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi1>, i32) -> vector<8xi64>1020  %53 = call <8 x i64> @llvm.vp.sext.v8i64.v8i32(<8 x i32> %0, <8 x i1> %11, i32 %12)1021  ; CHECK: "llvm.intr.vp.fptrunc"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf64>, vector<8xi1>, i32) -> vector<8xf32>1022  %54 = call <8 x float> @llvm.vp.fptrunc.v8f32.v8f64(<8 x double> %5, <8 x i1> %11, i32 %12)1023  ; CHECK: "llvm.intr.vp.fpext"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xi1>, i32) -> vector<8xf64>1024  %55 = call <8 x double> @llvm.vp.fpext.v8f64.v8f32(<8 x float> %2, <8 x i1> %11, i32 %12)1025  ; CHECK: "llvm.intr.vp.fptoui"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf64>, vector<8xi1>, i32) -> vector<8xi64>1026  %56 = call <8 x i64> @llvm.vp.fptoui.v8i64.v8f64(<8 x double> %5, <8 x i1> %11, i32 %12)1027  ; CHECK: "llvm.intr.vp.fptosi"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf64>, vector<8xi1>, i32) -> vector<8xi64>1028  %57 = call <8 x i64> @llvm.vp.fptosi.v8i64.v8f64(<8 x double> %5, <8 x i1> %11, i32 %12)1029  ; CHECK: "llvm.intr.vp.ptrtoint"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8x!llvm.ptr>, vector<8xi1>, i32) -> vector<8xi64>1030  %58 = call <8 x i64> @llvm.vp.ptrtoint.v8i64.v8p0(<8 x ptr> %6, <8 x i1> %11, i32 %12)1031  ; CHECK: "llvm.intr.vp.inttoptr"(%{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi64>, vector<8xi1>, i32) -> vector<8x!llvm.ptr>1032  %59 = call <8 x ptr> @llvm.vp.inttoptr.v8p0.v8i64(<8 x i64> %4, <8 x i1> %11, i32 %12)1033  ; CHECK: "llvm.intr.vp.fmuladd"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xf32>, vector<8xf32>, vector<8xf32>, vector<8xi1>, i32) -> vector<8xf32>1034  %60 = call <8 x float> @llvm.vp.fmuladd.v8f32(<8 x float> %2, <8 x float> %3, <8 x float> %3, <8 x i1> %11, i32 %12)1035  ; CHECK: "llvm.intr.vp.smax"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>1036  %61 = call <8 x i32> @llvm.vp.smax.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)1037  ; CHECK: "llvm.intr.vp.smin"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>1038  %62 = call <8 x i32> @llvm.vp.smin.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)1039  ; CHECK: "llvm.intr.vp.umax"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>1040  %63 = call <8 x i32> @llvm.vp.umax.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)1041  ; CHECK: "llvm.intr.vp.umin"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (vector<8xi32>, vector<8xi32>, vector<8xi1>, i32) -> vector<8xi32>1042  %64 = call <8 x i32> @llvm.vp.umin.v8i32(<8 x i32> %0, <8 x i32> %1, <8 x i1> %11, i32 %12)1043  ret void1044}1045 1046; CHECK-LABEL:  llvm.func @ssa_copy1047define float @ssa_copy(float %0) {1048  ; CHECK: %{{.*}} = llvm.intr.ssa.copy %{{.*}} : f321049  %2 = call float @llvm.ssa.copy.f32(float %0)1050  ret float %21051}1052 1053; CHECK-LABEL:  llvm.func @ptrmask1054define ptr @ptrmask(ptr %0, i64 %1) {1055  ; CHECK: %{{.*}} = llvm.intr.ptrmask %{{.*}} : (!llvm.ptr, i64) -> !llvm.ptr1056  %3 = call ptr @llvm.ptrmask.p0.i64(ptr %0, i64 %1)1057  ret ptr %31058}1059 1060; CHECK-LABEL:  llvm.func @vector_ptrmask1061define <8 x ptr> @vector_ptrmask(<8 x ptr> %0, <8 x i64> %1) {1062  ; CHECK: %{{.*}} = llvm.intr.ptrmask %{{.*}} : (vector<8x!llvm.ptr>, vector<8xi64>) -> vector<8x!llvm.ptr>1063  %3 = call <8 x ptr> @llvm.ptrmask.v8p0.v8i64(<8 x ptr> %0, <8 x i64> %1)1064  ret <8 x ptr> %31065}1066 1067; CHECK-LABEL: experimental_constrained_fptrunc1068define void @experimental_constrained_fptrunc(double %s, <4 x double> %v) {1069  ; CHECK: llvm.intr.experimental.constrained.fptrunc %{{.*}} towardzero ignore : f64 to f321070  %1 = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %s, metadata !"round.towardzero", metadata !"fpexcept.ignore")1071  ; CHECK: llvm.intr.experimental.constrained.fptrunc %{{.*}} tonearest maytrap : f64 to f321072  %2 = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %s, metadata !"round.tonearest", metadata !"fpexcept.maytrap")1073  ; CHECK: llvm.intr.experimental.constrained.fptrunc %{{.*}} upward strict : f64 to f321074  %3 = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %s, metadata !"round.upward", metadata !"fpexcept.strict")1075  ; CHECK: llvm.intr.experimental.constrained.fptrunc %{{.*}} downward ignore : f64 to f321076  %4 = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %s, metadata !"round.downward", metadata !"fpexcept.ignore")1077  ; CHECK: llvm.intr.experimental.constrained.fptrunc %{{.*}} tonearestaway ignore : f64 to f321078  %5 = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %s, metadata !"round.tonearestaway", metadata !"fpexcept.ignore")1079  ; CHECK: llvm.intr.experimental.constrained.fptrunc %{{.*}} tonearestaway ignore : vector<4xf64> to vector<4xf16>1080  %6 = call <4 x half> @llvm.experimental.constrained.fptrunc.v4f16.v4f64(<4 x double> %v, metadata !"round.tonearestaway", metadata !"fpexcept.ignore")1081  ret void1082}1083 1084; CHECK-LABEL: experimental_constrained_uitofp1085define void @experimental_constrained_uitofp(i32 %s, <4 x i32> %v) {1086  ; CHECK: llvm.intr.experimental.constrained.uitofp %{{.*}} towardzero ignore : i32 to f321087  %1 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %s, metadata !"round.towardzero", metadata !"fpexcept.ignore")1088  ; CHECK: llvm.intr.experimental.constrained.uitofp %{{.*}} tonearest maytrap : i32 to f321089  %2 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %s, metadata !"round.tonearest", metadata !"fpexcept.maytrap")1090  ; CHECK: llvm.intr.experimental.constrained.uitofp %{{.*}} upward strict : i32 to f321091  %3 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %s, metadata !"round.upward", metadata !"fpexcept.strict")1092  ; CHECK: llvm.intr.experimental.constrained.uitofp %{{.*}} downward ignore : i32 to f321093  %4 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %s, metadata !"round.downward", metadata !"fpexcept.ignore")1094  ; CHECK: llvm.intr.experimental.constrained.uitofp %{{.*}} tonearestaway ignore : i32 to f321095  %5 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %s, metadata !"round.tonearestaway", metadata !"fpexcept.ignore")1096  ; CHECK: llvm.intr.experimental.constrained.uitofp %{{.*}} tonearestaway ignore : vector<4xi32> to vector<4xf32>1097  %6 = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %v, metadata !"round.tonearestaway", metadata !"fpexcept.ignore")1098  ret void1099}1100 1101; CHECK-LABEL: experimental_constrained_sitofp1102define void @experimental_constrained_sitofp(i32 %s, <4 x i32> %v) {1103  ; CHECK: llvm.intr.experimental.constrained.sitofp %{{.*}} towardzero ignore : i32 to f321104  %1 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %s, metadata !"round.towardzero", metadata !"fpexcept.ignore")1105  ; CHECK: llvm.intr.experimental.constrained.sitofp %{{.*}} tonearest maytrap : i32 to f321106  %2 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %s, metadata !"round.tonearest", metadata !"fpexcept.maytrap")1107  ; CHECK: llvm.intr.experimental.constrained.sitofp %{{.*}} upward strict : i32 to f321108  %3 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %s, metadata !"round.upward", metadata !"fpexcept.strict")1109  ; CHECK: llvm.intr.experimental.constrained.sitofp %{{.*}} downward ignore : i32 to f321110  %4 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %s, metadata !"round.downward", metadata !"fpexcept.ignore")1111  ; CHECK: llvm.intr.experimental.constrained.sitofp %{{.*}} tonearestaway ignore : i32 to f321112  %5 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %s, metadata !"round.tonearestaway", metadata !"fpexcept.ignore")1113  ; CHECK: llvm.intr.experimental.constrained.sitofp %{{.*}} tonearestaway ignore : vector<4xi32> to vector<4xf32>1114  %6 = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %v, metadata !"round.tonearestaway", metadata !"fpexcept.ignore")1115  ret void1116}1117 1118; CHECK-LABEL: experimental_constrained_fpext1119define void @experimental_constrained_fpext(float %s, <4 x float> %v) {1120  ; CHECK: llvm.intr.experimental.constrained.fpext %{{.*}} ignore : f32 to f641121  %1 = call double @llvm.experimental.constrained.fpext.f64.f32(float %s, metadata !"fpexcept.ignore")1122  ; CHECK: llvm.intr.experimental.constrained.fpext %{{.*}} maytrap : f32 to f641123  %2 = call double @llvm.experimental.constrained.fpext.f64.f32(float %s, metadata !"fpexcept.maytrap")1124  ; CHECK: llvm.intr.experimental.constrained.fpext %{{.*}} strict : f32 to f641125  %3 = call double @llvm.experimental.constrained.fpext.f64.f32(float %s, metadata !"fpexcept.strict")1126  ; CHECK: llvm.intr.experimental.constrained.fpext %{{.*}} ignore : vector<4xf32> to vector<4xf64>1127  %6 = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float> %v, metadata !"fpexcept.ignore")1128  ret void1129}1130 1131; CHECK-LABEL:  llvm.func @ucmp1132define i2 @ucmp(i32 %a, i32 %b) {1133  ; CHECK: %{{.*}} = llvm.intr.ucmp(%{{.*}}, %{{.*}}) : (i32, i32) -> i21134  %r = call i2 @llvm.ucmp.i2.i32(i32 %a, i32 %b)1135  ret i2 %r1136}1137 1138; CHECK-LABEL:  llvm.func @vector_ucmp1139define <4 x i32> @vector_ucmp(<4 x i32> %a, <4 x i32> %b) {1140  ; CHECK: %{{.*}} = llvm.intr.ucmp(%{{.*}}, %{{.*}}) : (vector<4xi32>, vector<4xi32>) -> vector<4xi32>1141  %r = call <4 x i32> @llvm.ucmp.v4i32.v4i32(<4 x i32> %a, <4 x i32> %b)1142  ret <4 x i32> %r1143}1144 1145; CHECK-LABEL:  llvm.func @scmp1146define i2 @scmp(i32 %a, i32 %b) {1147  ; CHECK: %{{.*}} = llvm.intr.scmp(%{{.*}}, %{{.*}}) : (i32, i32) -> i21148  %r = call i2 @llvm.scmp.i2.i32(i32 %a, i32 %b)1149  ret i2 %r1150}1151 1152; CHECK-LABEL:  llvm.func @vector_scmp1153define <4 x i32> @vector_scmp(<4 x i32> %a, <4 x i32> %b) {1154  ; CHECK: %{{.*}} = llvm.intr.scmp(%{{.*}}, %{{.*}}) : (vector<4xi32>, vector<4xi32>) -> vector<4xi32>1155  %r = call <4 x i32> @llvm.scmp.v4i32.v4i32(<4 x i32> %a, <4 x i32> %b)1156  ret <4 x i32> %r1157}1158 1159declare float @llvm.fmuladd.f32(float, float, float)1160declare <8 x float> @llvm.fmuladd.v8f32(<8 x float>, <8 x float>, <8 x float>)1161declare float @llvm.fma.f32(float, float, float)1162declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>)1163declare void @llvm.prefetch.p0(ptr nocapture readonly, i32 immarg, i32 immarg, i32)1164declare i1 @llvm.is.fpclass.f32(float, i32 immarg)1165declare <8 x i1> @llvm.is.fpclass.v8f32(<8 x float>, i32 immarg)1166declare float @llvm.exp.f32(float)1167declare <8 x float> @llvm.exp.v8f32(<8 x float>)1168declare float @llvm.exp2.f32(float)1169declare <8 x float> @llvm.exp2.v8f32(<8 x float>)1170declare float @llvm.exp10.f32(float)1171declare <8 x float> @llvm.exp10.v8f32(<8 x float>)1172declare float @llvm.ldexp.f32.i32(float, i32)1173declare <8 x float> @llvm.ldexp.v8f32.i32(<8 x float>, i32)1174declare { float, i32 } @llvm.frexp.f32.i32(float)1175declare { <8 x float>, i32 } @llvm.frexp.v8f32.i32(<8 x float>)1176declare float @llvm.log.f32(float)1177declare <8 x float> @llvm.log.v8f32(<8 x float>)1178declare float @llvm.log10.f32(float)1179declare <8 x float> @llvm.log10.v8f32(<8 x float>)1180declare float @llvm.log2.f32(float)1181declare <8 x float> @llvm.log2.v8f32(<8 x float>)1182declare float @llvm.fabs.f32(float)1183declare <8 x float> @llvm.fabs.v8f32(<8 x float>)1184declare float @llvm.sqrt.f32(float)1185declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)1186declare float @llvm.ceil.f32(float)1187declare <8 x float> @llvm.ceil.v8f32(<8 x float>)1188declare float @llvm.floor.f32(float)1189declare <8 x float> @llvm.floor.v8f32(<8 x float>)1190declare float @llvm.cos.f32(float)1191declare <8 x float> @llvm.cos.v8f32(<8 x float>)1192declare float @llvm.sinh.f32(float)1193declare <8 x float> @llvm.sinh.v8f32(<8 x float>)1194declare float @llvm.cosh.f32(float)1195declare <8 x float> @llvm.cosh.v8f32(<8 x float>)1196declare float @llvm.tanh.f32(float)1197declare <8 x float> @llvm.tanh.v8f32(<8 x float>)1198declare float @llvm.copysign.f32(float, float)1199declare <8 x float> @llvm.copysign.v8f32(<8 x float>, <8 x float>)1200declare float @llvm.pow.f32(float, float)1201declare <8 x float> @llvm.pow.v8f32(<8 x float>, <8 x float>)1202declare float @llvm.rint.f32(float)1203declare double @llvm.rint.f64(double)1204declare <8 x float> @llvm.rint.v8f32(<8 x float>)1205declare <8 x double> @llvm.rint.v8f64(<8 x double>)1206declare float @llvm.nearbyint.f32(float)1207declare double @llvm.nearbyint.f64(double)1208declare <8 x float> @llvm.nearbyint.v8f32(<8 x float>)1209declare <8 x double> @llvm.nearbyint.v8f64(<8 x double>)1210declare i32 @llvm.lround.i32.f32(float)1211declare i64 @llvm.lround.i64.f32(float)1212declare i32 @llvm.lround.i32.f64(double)1213declare i64 @llvm.lround.i64.f64(double)1214declare i64 @llvm.llround.i64.f32(float)1215declare i64 @llvm.llround.i64.f64(double)1216declare i32 @llvm.lrint.i32.f32(float)1217declare i64 @llvm.lrint.i64.f32(float)1218declare i32 @llvm.lrint.i32.f64(double)1219declare i64 @llvm.lrint.i64.f64(double)1220declare i64 @llvm.llrint.i64.f32(float)1221declare i64 @llvm.llrint.i64.f64(double)1222declare i32 @llvm.bitreverse.i32(i32)1223declare <8 x i32> @llvm.bitreverse.v8i32(<8 x i32>)1224declare i32 @llvm.bswap.i32(i32)1225declare <8 x i32> @llvm.bswap.v8i32(<8 x i32>)1226declare i32 @llvm.ctlz.i32(i32, i1 immarg)1227declare <8 x i32> @llvm.ctlz.v8i32(<8 x i32>, i1 immarg)1228declare i32 @llvm.cttz.i32(i32, i1 immarg)1229declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1 immarg)1230declare i32 @llvm.abs.i32(i32, i1 immarg)1231declare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1 immarg)1232declare i32 @llvm.ctpop.i32(i32)1233declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>)1234declare i32 @llvm.fshl.i32(i32, i32, i32)1235declare <8 x i32> @llvm.fshl.v8i32(<8 x i32>, <8 x i32>, <8 x i32>)1236declare i32 @llvm.fshr.i32(i32, i32, i32)1237declare <8 x i32> @llvm.fshr.v8i32(<8 x i32>, <8 x i32>, <8 x i32>)1238declare float @llvm.maximum.f32(float, float)1239declare <8 x float> @llvm.maximum.v8f32(<8 x float>, <8 x float>)1240declare float @llvm.minimum.f32(float, float)1241declare <8 x float> @llvm.minimum.v8f32(<8 x float>, <8 x float>)1242declare float @llvm.maxnum.f32(float, float)1243declare <8 x float> @llvm.maxnum.v8f32(<8 x float>, <8 x float>)1244declare float @llvm.minnum.f32(float, float)1245declare <8 x float> @llvm.minnum.v8f32(<8 x float>, <8 x float>)1246declare i32 @llvm.smax.i32(i32, i32)1247declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)1248declare i32 @llvm.smin.i32(i32, i32)1249declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>)1250declare i32 @llvm.umax.i32(i32, i32)1251declare <8 x i32> @llvm.umax.v8i32(<8 x i32>, <8 x i32>)1252declare i32 @llvm.umin.i32(i32, i32)1253declare <8 x i32> @llvm.umin.v8i32(<8 x i32>, <8 x i32>)1254declare i32 @llvm.vector.reduce.add.v8i32(<8 x i32>)1255declare i32 @llvm.vector.reduce.and.v8i32(<8 x i32>)1256declare float @llvm.vector.reduce.fmax.v8f32(<8 x float>)1257declare float @llvm.vector.reduce.fmin.v8f32(<8 x float>)1258declare float @llvm.vector.reduce.fmaximum.v8f32(<8 x float>)1259declare float @llvm.vector.reduce.fminimum.v8f32(<8 x float>)1260declare i32 @llvm.vector.reduce.mul.v8i32(<8 x i32>)1261declare i32 @llvm.vector.reduce.or.v8i32(<8 x i32>)1262declare i32 @llvm.vector.reduce.smax.v8i32(<8 x i32>)1263declare i32 @llvm.vector.reduce.smin.v8i32(<8 x i32>)1264declare i32 @llvm.vector.reduce.umax.v8i32(<8 x i32>)1265declare i32 @llvm.vector.reduce.umin.v8i32(<8 x i32>)1266declare float @llvm.vector.reduce.fadd.v8f32(float, <8 x float>)1267declare float @llvm.vector.reduce.fmul.v8f32(float, <8 x float>)1268declare i32 @llvm.vector.reduce.xor.v8i32(<8 x i32>)1269declare <12 x float> @llvm.matrix.multiply.v12f32.v64f32.v48f32(<64 x float>, <48 x float>, i32 immarg, i32 immarg, i32 immarg)1270declare <48 x float> @llvm.matrix.transpose.v48f32(<48 x float>, i32 immarg, i32 immarg)1271declare <48 x float> @llvm.matrix.column.major.load.v48f32.i64(ptr nocapture, i64, i1 immarg, i32 immarg, i32 immarg)1272declare void @llvm.matrix.column.major.store.v48f32.i64(<48 x float>, ptr nocapture writeonly, i64, i1 immarg, i32 immarg, i32 immarg)1273declare <7 x i1> @llvm.get.active.lane.mask.v7i1.i64(i64, i64)1274declare <7 x float> @llvm.masked.load.v7f32.p0(ptr, i32 immarg, <7 x i1>, <7 x float>)1275declare void @llvm.masked.store.v7f32.p0(<7 x float>, ptr, i32 immarg, <7 x i1>)1276declare <7 x float> @llvm.masked.gather.v7f32.v7p0(<7 x ptr>, i32 immarg, <7 x i1>, <7 x float>)1277declare void @llvm.masked.scatter.v7f32.v7p0(<7 x float>, <7 x ptr>, i32 immarg, <7 x i1>)1278declare <7 x float> @llvm.masked.expandload.v7f32(ptr, <7 x i1>, <7 x float>)1279declare void @llvm.masked.compressstore.v7f32(<7 x float>, ptr, <7 x i1>)1280declare void @llvm.var.annotation.p0.p0(ptr, ptr, ptr, i32, ptr)1281declare ptr @llvm.ptr.annotation.p0.p0(ptr, ptr, ptr, i32, ptr)1282declare i16 @llvm.annotation.i16.p0(i16, ptr, ptr, i32)1283declare void @llvm.trap()1284declare void @llvm.debugtrap()1285declare void @llvm.ubsantrap(i8 immarg)1286declare void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i32, i1 immarg)1287declare void @llvm.memcpy.inline.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64 immarg, i1 immarg)1288declare void @llvm.memcpy.inline.p0.p0.i32(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i32 immarg, i1 immarg)1289declare void @llvm.memmove.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1 immarg)1290declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)1291declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32)1292declare { <8 x i32>, <8 x i1> } @llvm.sadd.with.overflow.v8i32(<8 x i32>, <8 x i32>)1293declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32)1294declare { <8 x i32>, <8 x i1> } @llvm.uadd.with.overflow.v8i32(<8 x i32>, <8 x i32>)1295declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32)1296declare { <8 x i32>, <8 x i1> } @llvm.ssub.with.overflow.v8i32(<8 x i32>, <8 x i32>)1297declare { i32, i1 } @llvm.usub.with.overflow.i32(i32, i32)1298declare { <8 x i32>, <8 x i1> } @llvm.usub.with.overflow.v8i32(<8 x i32>, <8 x i32>)1299declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32)1300declare { <8 x i32>, <8 x i1> } @llvm.smul.with.overflow.v8i32(<8 x i32>, <8 x i32>)1301declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32)1302declare { <8 x i32>, <8 x i1> } @llvm.umul.with.overflow.v8i32(<8 x i32>, <8 x i32>)1303declare i32 @llvm.sadd.sat.i32(i32, i32)1304declare <8 x i32> @llvm.sadd.sat.v8i32(<8 x i32>, <8 x i32>)1305declare i32 @llvm.uadd.sat.i32(i32, i32)1306declare <8 x i32> @llvm.uadd.sat.v8i32(<8 x i32>, <8 x i32>)1307declare i32 @llvm.ssub.sat.i32(i32, i32)1308declare <8 x i32> @llvm.ssub.sat.v8i32(<8 x i32>, <8 x i32>)1309declare i32 @llvm.usub.sat.i32(i32, i32)1310declare <8 x i32> @llvm.usub.sat.v8i32(<8 x i32>, <8 x i32>)1311declare i32 @llvm.sshl.sat.i32(i32, i32)1312declare <8 x i32> @llvm.sshl.sat.v8i32(<8 x i32>, <8 x i32>)1313declare i32 @llvm.ushl.sat.i32(i32, i32)1314declare <8 x i32> @llvm.ushl.sat.v8i32(<8 x i32>, <8 x i32>)1315declare i1 @llvm.is.constant.i32(i32)1316declare i32 @llvm.expect.i32(i32, i32)1317declare i16 @llvm.expect.with.probability.i16(i16, i16, double immarg)1318declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull)1319declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr)1320declare ptr @llvm.coro.begin(token, ptr writeonly)1321declare i64 @llvm.coro.size.i64()1322declare i32 @llvm.coro.size.i32()1323declare i64 @llvm.coro.align.i64()1324declare i32 @llvm.coro.align.i32()1325declare token @llvm.coro.save(ptr)1326declare i8 @llvm.coro.suspend(token, i1)1327declare void @llvm.coro.end(ptr, i1, token)1328declare ptr @llvm.coro.free(token, ptr nocapture readonly)1329declare void @llvm.coro.resume(ptr)1330declare ptr @llvm.coro.promise(ptr nocapture, i32, i1)1331declare i32 @llvm.eh.typeid.for.p0(ptr)1332declare ptr @llvm.stacksave.p0()1333declare ptr addrspace(1) @llvm.stacksave.p1()1334declare void @llvm.stackrestore.p0(ptr)1335declare void @llvm.stackrestore.p1(ptr addrspace(1))1336declare void @llvm.va_start.p0(ptr)1337declare void @llvm.va_copy.p0(ptr, ptr)1338declare void @llvm.va_end.p0(ptr)1339declare <8 x i32> @llvm.vp.add.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1340declare <8 x i32> @llvm.vp.sub.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1341declare <8 x i32> @llvm.vp.mul.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1342declare <8 x i32> @llvm.vp.sdiv.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1343declare <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1344declare <8 x i32> @llvm.vp.srem.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1345declare <8 x i32> @llvm.vp.urem.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1346declare <8 x i32> @llvm.vp.ashr.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1347declare <8 x i32> @llvm.vp.lshr.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1348declare <8 x i32> @llvm.vp.shl.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1349declare <8 x i32> @llvm.vp.or.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1350declare <8 x i32> @llvm.vp.and.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1351declare <8 x i32> @llvm.vp.xor.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1352declare <8 x float> @llvm.vp.fadd.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)1353declare <8 x float> @llvm.vp.fsub.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)1354declare <8 x float> @llvm.vp.fmul.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)1355declare <8 x float> @llvm.vp.fdiv.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)1356declare <8 x float> @llvm.vp.frem.v8f32(<8 x float>, <8 x float>, <8 x i1>, i32)1357declare <8 x float> @llvm.vp.fneg.v8f32(<8 x float>, <8 x i1>, i32)1358declare <8 x float> @llvm.vp.fma.v8f32(<8 x float>, <8 x float>, <8 x float>, <8 x i1>, i32)1359declare <8 x float> @llvm.vp.fmuladd.v8f32(<8 x float>, <8 x float>, <8 x float>, <8 x i1>, i32)1360declare <8 x i32> @llvm.vp.smax.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1361declare <8 x i32> @llvm.vp.smin.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1362declare <8 x i32> @llvm.vp.umax.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1363declare <8 x i32> @llvm.vp.umin.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)1364declare i32 @llvm.vp.reduce.add.v8i32(i32, <8 x i32>, <8 x i1>, i32)1365declare i32 @llvm.vp.reduce.mul.v8i32(i32, <8 x i32>, <8 x i1>, i32)1366declare i32 @llvm.vp.reduce.and.v8i32(i32, <8 x i32>, <8 x i1>, i32)1367declare i32 @llvm.vp.reduce.or.v8i32(i32, <8 x i32>, <8 x i1>, i32)1368declare i32 @llvm.vp.reduce.xor.v8i32(i32, <8 x i32>, <8 x i1>, i32)1369declare i32 @llvm.vp.reduce.smax.v8i32(i32, <8 x i32>, <8 x i1>, i32)1370declare i32 @llvm.vp.reduce.smin.v8i32(i32, <8 x i32>, <8 x i1>, i32)1371declare i32 @llvm.vp.reduce.umax.v8i32(i32, <8 x i32>, <8 x i1>, i32)1372declare i32 @llvm.vp.reduce.umin.v8i32(i32, <8 x i32>, <8 x i1>, i32)1373declare float @llvm.vp.reduce.fadd.v8f32(float, <8 x float>, <8 x i1>, i32)1374declare float @llvm.vp.reduce.fmul.v8f32(float, <8 x float>, <8 x i1>, i32)1375declare float @llvm.vp.reduce.fmax.v8f32(float, <8 x float>, <8 x i1>, i32)1376declare float @llvm.vp.reduce.fmin.v8f32(float, <8 x float>, <8 x i1>, i32)1377declare <8 x i32> @llvm.vp.select.v8i32(<8 x i1>, <8 x i32>, <8 x i32>, i32)1378declare <8 x i32> @llvm.vp.merge.v8i32(<8 x i1>, <8 x i32>, <8 x i32>, i32)1379declare void @llvm.vp.store.v8i32.p0(<8 x i32>, ptr nocapture, <8 x i1>, i32)1380declare <8 x i32> @llvm.vp.load.v8i32.p0(ptr nocapture, <8 x i1>, i32)1381declare void @llvm.experimental.vp.strided.store.v8i32.p0.i32(<8 x i32>, ptr nocapture, i32, <8 x i1>, i32)1382declare <8 x i32> @llvm.experimental.vp.strided.load.v8i32.p0.i32(ptr nocapture, i32, <8 x i1>, i32)1383declare <8 x i32> @llvm.vp.trunc.v8i32.v8i64(<8 x i64>, <8 x i1>, i32)1384declare <8 x i64> @llvm.vp.zext.v8i64.v8i32(<8 x i32>, <8 x i1>, i32)1385declare <8 x i64> @llvm.vp.sext.v8i64.v8i32(<8 x i32>, <8 x i1>, i32)1386declare <8 x float> @llvm.vp.fptrunc.v8f32.v8f64(<8 x double>, <8 x i1>, i32)1387declare <8 x double> @llvm.vp.fpext.v8f64.v8f32(<8 x float>, <8 x i1>, i32)1388declare <8 x i64> @llvm.vp.fptoui.v8i64.v8f64(<8 x double>, <8 x i1>, i32)1389declare <8 x i64> @llvm.vp.fptosi.v8i64.v8f64(<8 x double>, <8 x i1>, i32)1390declare <8 x i64> @llvm.vp.ptrtoint.v8i64.v8p0(<8 x ptr>, <8 x i1>, i32)1391declare <8 x ptr> @llvm.vp.inttoptr.v8p0.v8i64(<8 x i64>, <8 x i1>, i32)1392declare void @llvm.lifetime.start.p0(ptr nocapture)1393declare void @llvm.lifetime.end.p0(ptr nocapture)1394declare ptr @llvm.invariant.start.p0(i64 immarg, ptr nocapture)1395declare void @llvm.invariant.end.p0(ptr, i64 immarg, ptr nocapture)1396declare ptr @llvm.launder.invariant.group.p0(ptr nocapture)1397declare ptr @llvm.strip.invariant.group.p0(ptr nocapture)1398 1399declare void @llvm.assume(i1)1400declare float @llvm.ssa.copy.f32(float returned)1401declare ptr @llvm.ptrmask.p0.i64(ptr, i64)1402declare <8 x ptr> @llvm.ptrmask.v8p0.v8i64(<8 x ptr>, <8 x i64>)1403declare <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float>, <4 x float>, i64)1404declare <4 x float> @llvm.vector.extract.v4f32.nxv4f32(<vscale x 4 x float>, i64)1405declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)1406declare float @llvm.experimental.constrained.uitofp.f32.i32(i32, metadata, metadata)1407declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)1408declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)1409declare <4 x half> @llvm.experimental.constrained.fptrunc.v4f16.v4f64(<4 x double>, metadata, metadata)1410declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)1411declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)1412declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)1413declare i2 @llvm.ucmp.i2.i32(i32, i32)1414declare <4 x i32> @llvm.ucmp.v4i32.v4i32(<4 x i32>, <4 x i32>)1415declare i2 @llvm.scmp.i2.i32(i32, i32)1416declare <4 x i32> @llvm.scmp.v4i32.v4i32(<4 x i32>, <4 x i32>)1417