brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.3 KiB · 48d6e01 Raw
670 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s4 5declare <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32>, <4 x i32>, i64)6 7define <8 x i32> @insert_lo128_v8i32_1(<4 x i32> %a) {8; CHECK-LABEL: insert_lo128_v8i32_1:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr011; CHECK-NEXT:    ret12entry:13  %1 = call <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32> poison, <4 x i32> %a, i64 0)14  ret <8 x i32> %115}16 17define <8 x i32> @insert_hi128_v8i32_1(<4 x i32> %a) {18; CHECK-LABEL: insert_hi128_v8i32_1:19; CHECK:       # %bb.0: # %entry20; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr021; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 222; CHECK-NEXT:    ret23entry:24  %1 = call <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32> poison, <4 x i32> %a, i64 4)25  ret <8 x i32> %126}27 28define <8 x i32> @insert_lo128_v8i32_2(<4 x i32> %a, <4 x i32> %b) {29; CHECK-LABEL: insert_lo128_v8i32_2:30; CHECK:       # %bb.0: # %entry31; CHECK-NEXT:    vori.b $vr0, $vr1, 032; CHECK-NEXT:    ret33entry:34  %1 = call <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32> poison, <4 x i32> %b, i64 0)35  ret <8 x i32> %136}37 38define <8 x i32> @insert_hi128_v8i32_2(<4 x i32> %a, <4 x i32> %b) {39; CHECK-LABEL: insert_hi128_v8i32_2:40; CHECK:       # %bb.0: # %entry41; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr142; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 243; CHECK-NEXT:    ret44entry:45  %1 = call <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32> poison, <4 x i32> %b, i64 4)46  ret <8 x i32> %147}48 49define <8 x i32> @insert_lo128_v8i32_3(<8 x i32> %a, <4 x i32> %b) {50; CHECK-LABEL: insert_lo128_v8i32_3:51; CHECK:       # %bb.0: # %entry52; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr153; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 4854; CHECK-NEXT:    ret55entry:56  %1 = call <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32> %a, <4 x i32> %b, i64 0)57  ret <8 x i32> %158}59 60define <8 x i32> @insert_hi128_v8i32_3(<8 x i32> %a, <4 x i32> %b) {61; CHECK-LABEL: insert_hi128_v8i32_3:62; CHECK:       # %bb.0: # %entry63; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr164; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 265; CHECK-NEXT:    ret66entry:67  %1 = call <8 x i32> @llvm.experimental.vector.insert.v8i32.v4i32(<8 x i32> %a, <4 x i32> %b, i64 4)68  ret <8 x i32> %169}70 71declare <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float>, <4 x float>, i64)72 73define <8 x float> @insert_lo128_v8f32_1(<4 x float> %a) {74; CHECK-LABEL: insert_lo128_v8f32_1:75; CHECK:       # %bb.0: # %entry76; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr077; CHECK-NEXT:    ret78entry:79  %1 = call <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float> poison, <4 x float> %a, i64 0)80  ret <8 x float> %181}82 83define <8 x float> @insert_hi128_v8f32_1(<4 x float> %a) {84; CHECK-LABEL: insert_hi128_v8f32_1:85; CHECK:       # %bb.0: # %entry86; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr087; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 288; CHECK-NEXT:    ret89entry:90  %1 = call <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float> poison, <4 x float> %a, i64 4)91  ret <8 x float> %192}93 94define <8 x float> @insert_lo128_v8f32_2(<4 x float> %a, <4 x float> %b) {95; CHECK-LABEL: insert_lo128_v8f32_2:96; CHECK:       # %bb.0: # %entry97; CHECK-NEXT:    vori.b $vr0, $vr1, 098; CHECK-NEXT:    ret99entry:100  %1 = call <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float> poison, <4 x float> %b, i64 0)101  ret <8 x float> %1102}103 104define <8 x float> @insert_hi128_v8f32_2(<4 x float> %a, <4 x float> %b) {105; CHECK-LABEL: insert_hi128_v8f32_2:106; CHECK:       # %bb.0: # %entry107; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1108; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2109; CHECK-NEXT:    ret110entry:111  %1 = call <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float> poison, <4 x float> %b, i64 4)112  ret <8 x float> %1113}114 115define <8 x float> @insert_lo128_v8f32_3(<8 x float> %a, <4 x float> %b) {116; CHECK-LABEL: insert_lo128_v8f32_3:117; CHECK:       # %bb.0: # %entry118; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1119; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48120; CHECK-NEXT:    ret121entry:122  %1 = call <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float> %a, <4 x float> %b, i64 0)123  ret <8 x float> %1124}125 126define <8 x float> @insert_hi128_v8f32_3(<8 x float> %a, <4 x float> %b) {127; CHECK-LABEL: insert_hi128_v8f32_3:128; CHECK:       # %bb.0: # %entry129; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1130; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2131; CHECK-NEXT:    ret132entry:133  %1 = call <8 x float> @llvm.experimental.vector.insert.v8f32.v4f32(<8 x float> %a, <4 x float> %b, i64 4)134  ret <8 x float> %1135}136 137declare <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64>, <2 x i64>, i64)138 139define <4 x i64> @insert_lo128_v4i64_1(<2 x i64> %a) {140; CHECK-LABEL: insert_lo128_v4i64_1:141; CHECK:       # %bb.0: # %entry142; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0143; CHECK-NEXT:    ret144entry:145  %1 = call <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64> poison, <2 x i64> %a, i64 0)146  ret <4 x i64> %1147}148 149define <4 x i64> @insert_hi128_v4i64_1(<2 x i64> %a) {150; CHECK-LABEL: insert_hi128_v4i64_1:151; CHECK:       # %bb.0: # %entry152; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0153; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 2154; CHECK-NEXT:    ret155entry:156  %1 = call <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64> poison, <2 x i64> %a, i64 2)157  ret <4 x i64> %1158}159 160define <4 x i64> @insert_lo128_v4i64_2(<2 x i64> %a, <2 x i64> %b) {161; CHECK-LABEL: insert_lo128_v4i64_2:162; CHECK:       # %bb.0: # %entry163; CHECK-NEXT:    vori.b $vr0, $vr1, 0164; CHECK-NEXT:    ret165entry:166  %1 = call <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64> poison, <2 x i64> %b, i64 0)167  ret <4 x i64> %1168}169 170define <4 x i64> @insert_hi128_v4i64_2(<2 x i64> %a, <2 x i64> %b) {171; CHECK-LABEL: insert_hi128_v4i64_2:172; CHECK:       # %bb.0: # %entry173; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1174; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2175; CHECK-NEXT:    ret176entry:177  %1 = call <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64> poison, <2 x i64> %b, i64 2)178  ret <4 x i64> %1179}180 181define <4 x i64> @insert_lo128_v4i64_3(<4 x i64> %a, <2 x i64> %b) {182; CHECK-LABEL: insert_lo128_v4i64_3:183; CHECK:       # %bb.0: # %entry184; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1185; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48186; CHECK-NEXT:    ret187entry:188  %1 = call <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64> %a, <2 x i64> %b, i64 0)189  ret <4 x i64> %1190}191 192define <4 x i64> @insert_hi128_v4i64_3(<4 x i64> %a, <2 x i64> %b) {193; CHECK-LABEL: insert_hi128_v4i64_3:194; CHECK:       # %bb.0: # %entry195; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1196; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2197; CHECK-NEXT:    ret198entry:199  %1 = call <4 x i64> @llvm.experimental.vector.insert.v4i64.v2i64(<4 x i64> %a, <2 x i64> %b, i64 2)200  ret <4 x i64> %1201}202 203declare <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double>, <2 x double>, i64)204 205define <4 x double> @insert_lo128_v4f64_1(<2 x double> %a) {206; CHECK-LABEL: insert_lo128_v4f64_1:207; CHECK:       # %bb.0: # %entry208; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0209; CHECK-NEXT:    ret210entry:211  %1 = call <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double> poison, <2 x double> %a, i64 0)212  ret <4 x double> %1213}214 215define <4 x double> @insert_hi128_v4f64_1(<2 x double> %a) {216; CHECK-LABEL: insert_hi128_v4f64_1:217; CHECK:       # %bb.0: # %entry218; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0219; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 2220; CHECK-NEXT:    ret221entry:222  %1 = call <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double> poison, <2 x double> %a, i64 2)223  ret <4 x double> %1224}225 226define <4 x double> @insert_lo128_v4f64_2(<2 x double> %a, <2 x double> %b) {227; CHECK-LABEL: insert_lo128_v4f64_2:228; CHECK:       # %bb.0: # %entry229; CHECK-NEXT:    vori.b $vr0, $vr1, 0230; CHECK-NEXT:    ret231entry:232  %1 = call <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double> poison, <2 x double> %b, i64 0)233  ret <4 x double> %1234}235 236define <4 x double> @insert_hi128_v4f64_2(<2 x double> %a, <2 x double> %b) {237; CHECK-LABEL: insert_hi128_v4f64_2:238; CHECK:       # %bb.0: # %entry239; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1240; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2241; CHECK-NEXT:    ret242entry:243  %1 = call <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double> poison, <2 x double> %b, i64 2)244  ret <4 x double> %1245}246 247define <4 x double> @insert_lo128_v4f64_3(<4 x double> %a, <2 x double> %b) {248; CHECK-LABEL: insert_lo128_v4f64_3:249; CHECK:       # %bb.0: # %entry250; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1251; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48252; CHECK-NEXT:    ret253entry:254  %1 = call <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double> %a, <2 x double> %b, i64 0)255  ret <4 x double> %1256}257 258define <4 x double> @insert_hi128_v4f64_3(<4 x double> %a, <2 x double> %b) {259; CHECK-LABEL: insert_hi128_v4f64_3:260; CHECK:       # %bb.0: # %entry261; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1262; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2263; CHECK-NEXT:    ret264entry:265  %1 = call <4 x double> @llvm.experimental.vector.insert.v4f64.v2f64(<4 x double> %a, <2 x double> %b, i64 2)266  ret <4 x double> %1267}268 269declare <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16>, <8 x i16>, i64)270 271define <16 x i16> @insert_lo128_v16i16_1(<8 x i16> %a) {272; CHECK-LABEL: insert_lo128_v16i16_1:273; CHECK:       # %bb.0: # %entry274; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0275; CHECK-NEXT:    ret276entry:277  %1 = call <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16> poison, <8 x i16> %a, i64 0)278  ret <16 x i16> %1279}280 281define <16 x i16> @insert_hi128_v16i16_1(<8 x i16> %a) {282; CHECK-LABEL: insert_hi128_v16i16_1:283; CHECK:       # %bb.0: # %entry284; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0285; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 2286; CHECK-NEXT:    ret287entry:288  %1 = call <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16> poison, <8 x i16> %a, i64 8)289  ret <16 x i16> %1290}291 292define <16 x i16> @insert_lo128_v16i16_2(<8 x i16> %a, <8 x i16> %b) {293; CHECK-LABEL: insert_lo128_v16i16_2:294; CHECK:       # %bb.0: # %entry295; CHECK-NEXT:    vori.b $vr0, $vr1, 0296; CHECK-NEXT:    ret297entry:298  %1 = call <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16> poison, <8 x i16> %b, i64 0)299  ret <16 x i16> %1300}301 302define <16 x i16> @insert_hi128_v16i16_2(<8 x i16> %a, <8 x i16> %b) {303; CHECK-LABEL: insert_hi128_v16i16_2:304; CHECK:       # %bb.0: # %entry305; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1306; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2307; CHECK-NEXT:    ret308entry:309  %1 = call <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16> poison, <8 x i16> %b, i64 8)310  ret <16 x i16> %1311}312 313define <16 x i16> @insert_lo128_v16i16_3(<16 x i16> %a, <8 x i16> %b) {314; CHECK-LABEL: insert_lo128_v16i16_3:315; CHECK:       # %bb.0: # %entry316; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1317; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48318; CHECK-NEXT:    ret319entry:320  %1 = call <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16> %a, <8 x i16> %b, i64 0)321  ret <16 x i16> %1322}323 324define <16 x i16> @insert_hi128_v16i16_3(<16 x i16> %a, <8 x i16> %b) {325; CHECK-LABEL: insert_hi128_v16i16_3:326; CHECK:       # %bb.0: # %entry327; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1328; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2329; CHECK-NEXT:    ret330entry:331  %1 = call <16 x i16> @llvm.experimental.vector.insert.v16i16.v8i16(<16 x i16> %a, <8 x i16> %b, i64 8)332  ret <16 x i16> %1333}334 335declare <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8>, <16 x i8>, i64)336 337define <32 x i8> @insert_lo128_v32i8_1(<16 x i8> %a) {338; CHECK-LABEL: insert_lo128_v32i8_1:339; CHECK:       # %bb.0: # %entry340; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0341; CHECK-NEXT:    ret342entry:343  %1 = call <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8> poison, <16 x i8> %a, i64 0)344  ret <32 x i8> %1345}346 347define <32 x i8> @insert_hi128_v32i8_1(<16 x i8> %a) {348; CHECK-LABEL: insert_hi128_v32i8_1:349; CHECK:       # %bb.0: # %entry350; CHECK-NEXT:    # kill: def $vr0 killed $vr0 def $xr0351; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 2352; CHECK-NEXT:    ret353entry:354  %1 = call <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8> poison, <16 x i8> %a, i64 16)355  ret <32 x i8> %1356}357 358define <32 x i8> @insert_lo128_v32i8_2(<16 x i8> %a, <16 x i8> %b) {359; CHECK-LABEL: insert_lo128_v32i8_2:360; CHECK:       # %bb.0: # %entry361; CHECK-NEXT:    vori.b $vr0, $vr1, 0362; CHECK-NEXT:    ret363entry:364  %1 = call <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8> poison, <16 x i8> %b, i64 0)365  ret <32 x i8> %1366}367 368define <32 x i8> @insert_hi128_v32i8_2(<16 x i8> %a, <16 x i8> %b) {369; CHECK-LABEL: insert_hi128_v32i8_2:370; CHECK:       # %bb.0: # %entry371; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1372; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2373; CHECK-NEXT:    ret374entry:375  %1 = call <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8> poison, <16 x i8> %b, i64 16)376  ret <32 x i8> %1377}378 379define <32 x i8> @insert_lo128_v32i8_3(<32 x i8> %a, <16 x i8> %b) {380; CHECK-LABEL: insert_lo128_v32i8_3:381; CHECK:       # %bb.0: # %entry382; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1383; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 48384; CHECK-NEXT:    ret385entry:386  %1 = call <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8> %a, <16 x i8> %b, i64 0)387  ret <32 x i8> %1388}389 390define <32 x i8> @insert_hi128_v32i8_3(<32 x i8> %a, <16 x i8> %b) {391; CHECK-LABEL: insert_hi128_v32i8_3:392; CHECK:       # %bb.0: # %entry393; CHECK-NEXT:    # kill: def $vr1 killed $vr1 def $xr1394; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 2395; CHECK-NEXT:    ret396entry:397  %1 = call <32 x i8> @llvm.experimental.vector.insert.v32i8.v16i8(<32 x i8> %a, <16 x i8> %b, i64 16)398  ret <32 x i8> %1399}400 401define <4 x i32> @extract_lo128_v8i32_1(<8 x i32> %a) {402; CHECK-LABEL: extract_lo128_v8i32_1:403; CHECK:       # %bb.0: # %entry404; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0405; CHECK-NEXT:    ret406entry:407  %1 = shufflevector <8 x i32> %a, <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>408  ret <4 x i32> %1409}410 411define <4 x i32> @extract_hi128_v8i32_1(<8 x i32> %a) {412; CHECK-LABEL: extract_hi128_v8i32_1:413; CHECK:       # %bb.0: # %entry414; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1415; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0416; CHECK-NEXT:    ret417entry:418  %1 = shufflevector <8 x i32> %a, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>419  ret <4 x i32> %1420}421 422define <4 x i32> @extract_lo128_v8i32_2(<8 x i32> %a, <8 x i32> %b) {423; CHECK-LABEL: extract_lo128_v8i32_2:424; CHECK:       # %bb.0: # %entry425; CHECK-NEXT:    xvori.b $xr0, $xr1, 0426; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0427; CHECK-NEXT:    ret428entry:429  %1 = shufflevector <8 x i32> %b, <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>430  ret <4 x i32> %1431}432 433define <4 x i32> @extract_hi128_v8i32_2(<8 x i32> %a, <8 x i32> %b) {434; CHECK-LABEL: extract_hi128_v8i32_2:435; CHECK:       # %bb.0: # %entry436; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 1437; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0438; CHECK-NEXT:    ret439entry:440  %1 = shufflevector <8 x i32> %b, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>441  ret <4 x i32> %1442}443 444define <4 x float> @extract_lo128_v8f32_1(<8 x float> %a) {445; CHECK-LABEL: extract_lo128_v8f32_1:446; CHECK:       # %bb.0: # %entry447; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0448; CHECK-NEXT:    ret449entry:450  %1 = shufflevector <8 x float> %a, <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>451  ret <4 x float> %1452}453 454define <4 x float> @extract_hi128_v8f32_1(<8 x float> %a) {455; CHECK-LABEL: extract_hi128_v8f32_1:456; CHECK:       # %bb.0: # %entry457; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1458; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0459; CHECK-NEXT:    ret460entry:461  %1 = shufflevector <8 x float> %a, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>462  ret <4 x float> %1463}464 465define <4 x float> @extract_lo128_v8f32_2(<8 x float> %a, <8 x float> %b) {466; CHECK-LABEL: extract_lo128_v8f32_2:467; CHECK:       # %bb.0: # %entry468; CHECK-NEXT:    xvori.b $xr0, $xr1, 0469; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0470; CHECK-NEXT:    ret471entry:472  %1 = shufflevector <8 x float> %b, <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>473  ret <4 x float> %1474}475 476define <4 x float> @extract_hi128_v8f32_2(<8 x float> %a, <8 x float> %b) {477; CHECK-LABEL: extract_hi128_v8f32_2:478; CHECK:       # %bb.0: # %entry479; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 1480; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0481; CHECK-NEXT:    ret482entry:483  %1 = shufflevector <8 x float> %b, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>484  ret <4 x float> %1485}486 487define <2 x i64> @extract_lo128_v4i64_1(<4 x i64> %a) {488; CHECK-LABEL: extract_lo128_v4i64_1:489; CHECK:       # %bb.0: # %entry490; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0491; CHECK-NEXT:    ret492entry:493  %1 = shufflevector <4 x i64> %a, <4 x i64> poison, <2 x i32> <i32 0, i32 1>494  ret <2 x i64> %1495}496 497define <2 x i64> @extract_hi128_v4i64_1(<4 x i64> %a) {498; CHECK-LABEL: extract_hi128_v4i64_1:499; CHECK:       # %bb.0: # %entry500; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1501; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0502; CHECK-NEXT:    ret503entry:504  %1 = shufflevector <4 x i64> %a, <4 x i64> poison, <2 x i32> <i32 2, i32 3>505  ret <2 x i64> %1506}507 508define <2 x i64> @extract_lo128_v4i64_2(<4 x i64> %a, <4 x i64> %b) {509; CHECK-LABEL: extract_lo128_v4i64_2:510; CHECK:       # %bb.0: # %entry511; CHECK-NEXT:    xvori.b $xr0, $xr1, 0512; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0513; CHECK-NEXT:    ret514entry:515  %1 = shufflevector <4 x i64> %b, <4 x i64> poison, <2 x i32> <i32 0, i32 1>516  ret <2 x i64> %1517}518 519define <2 x i64> @extract_hi128_v4i64_2(<4 x i64> %a, <4 x i64> %b) {520; CHECK-LABEL: extract_hi128_v4i64_2:521; CHECK:       # %bb.0: # %entry522; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 1523; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0524; CHECK-NEXT:    ret525entry:526  %1 = shufflevector <4 x i64> %b, <4 x i64> poison, <2 x i32> <i32 2, i32 3>527  ret <2 x i64> %1528}529 530define <2 x double> @extract_lo128_v4f64_a(<4 x double> %a) {531; CHECK-LABEL: extract_lo128_v4f64_a:532; CHECK:       # %bb.0: # %entry533; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0534; CHECK-NEXT:    ret535entry:536  %1 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 1>537  ret <2 x double> %1538}539 540define <2 x double> @extract_hi128_v4f64_1(<4 x double> %a) {541; CHECK-LABEL: extract_hi128_v4f64_1:542; CHECK:       # %bb.0: # %entry543; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1544; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0545; CHECK-NEXT:    ret546entry:547  %1 = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 2, i32 3>548  ret <2 x double> %1549}550 551define <2 x double> @extract_lo128_v4f64_2(<4 x double> %a, <4 x double> %b) {552; CHECK-LABEL: extract_lo128_v4f64_2:553; CHECK:       # %bb.0: # %entry554; CHECK-NEXT:    xvori.b $xr0, $xr1, 0555; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0556; CHECK-NEXT:    ret557entry:558  %1 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 0, i32 1>559  ret <2 x double> %1560}561 562define <2 x double> @extract_hi128_v4f64_2(<4 x double> %a, <4 x double> %b) {563; CHECK-LABEL: extract_hi128_v4f64_2:564; CHECK:       # %bb.0: # %entry565; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 1566; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0567; CHECK-NEXT:    ret568entry:569  %1 = shufflevector <4 x double> %b, <4 x double> poison, <2 x i32> <i32 2, i32 3>570  ret <2 x double> %1571}572 573define <8 x i16> @extract_lo128_v16i16_1(<16 x i16> %a) {574; CHECK-LABEL: extract_lo128_v16i16_1:575; CHECK:       # %bb.0: # %entry576; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0577; CHECK-NEXT:    ret578entry:579  %1 = shufflevector <16 x i16> %a, <16 x i16> poison,580                     <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>581  ret <8 x i16> %1582}583 584define <8 x i16> @extract_hi128_v16i16_1(<16 x i16> %a) {585; CHECK-LABEL: extract_hi128_v16i16_1:586; CHECK:       # %bb.0: # %entry587; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1588; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0589; CHECK-NEXT:    ret590entry:591  %1 = shufflevector <16 x i16> %a, <16 x i16> poison,592                     <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>593  ret <8 x i16> %1594}595 596define <8 x i16> @extract_lo128_v16i16_2(<16 x i16> %a, <16 x i16> %b) {597; CHECK-LABEL: extract_lo128_v16i16_2:598; CHECK:       # %bb.0: # %entry599; CHECK-NEXT:    xvori.b $xr0, $xr1, 0600; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0601; CHECK-NEXT:    ret602entry:603  %1 = shufflevector <16 x i16> %b, <16 x i16> poison,604                     <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>605  ret <8 x i16> %1606}607 608define <8 x i16> @extract_hi128_v16i16_2(<16 x i16> %a, <16 x i16> %b) {609; CHECK-LABEL: extract_hi128_v16i16_2:610; CHECK:       # %bb.0: # %entry611; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 1612; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0613; CHECK-NEXT:    ret614entry:615  %1 = shufflevector <16 x i16> %b, <16 x i16> poison,616                     <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>617  ret <8 x i16> %1618}619 620define <16 x i8> @extract_lo128_v32i8_1(<32 x i8> %a) {621; CHECK-LABEL: extract_lo128_v32i8_1:622; CHECK:       # %bb.0: # %entry623; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0624; CHECK-NEXT:    ret625entry:626  %1 = shufflevector <32 x i8> %a, <32 x i8> poison,627                     <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,628                                 i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>629  ret <16 x i8> %1630}631 632define <16 x i8> @extract_hi128_v32i8_1(<32 x i8> %a) {633; CHECK-LABEL: extract_hi128_v32i8_1:634; CHECK:       # %bb.0: # %entry635; CHECK-NEXT:    xvpermi.q $xr0, $xr0, 1636; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0637; CHECK-NEXT:    ret638entry:639  %1 = shufflevector <32 x i8> %a, <32 x i8> poison,640                     <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23,641                                 i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>642  ret <16 x i8> %1643}644 645define <16 x i8> @extract_lo128_v32i8_2(<32 x i8> %a, <32 x i8> %b) {646; CHECK-LABEL: extract_lo128_v32i8_2:647; CHECK:       # %bb.0: # %entry648; CHECK-NEXT:    xvori.b $xr0, $xr1, 0649; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0650; CHECK-NEXT:    ret651entry:652  %1 = shufflevector <32 x i8> %b, <32 x i8> poison,653                     <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,654                                 i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>655  ret <16 x i8> %1656}657 658define <16 x i8> @extract_hi128_v32i8_2(<32 x i8> %a, <32 x i8> %b) {659; CHECK-LABEL: extract_hi128_v32i8_2:660; CHECK:       # %bb.0: # %entry661; CHECK-NEXT:    xvpermi.q $xr0, $xr1, 1662; CHECK-NEXT:    # kill: def $vr0 killed $vr0 killed $xr0663; CHECK-NEXT:    ret664entry:665  %1 = shufflevector <32 x i8> %b, <32 x i8> poison,666                     <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23,667                                 i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>668  ret <16 x i8> %1669}670