94 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 %s --check-prefixes=CHECK,LA323; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s --check-prefixes=CHECK,LA644 5define <32 x i8> @insert_extract_v32i8(<32 x i8> %a) nounwind {6; CHECK-LABEL: insert_extract_v32i8:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: xvextrins.b $xr0, $xr0, 319; CHECK-NEXT: ret10entry:11 %b_lo = extractelement <32 x i8> %a, i32 1512 %b_hi = extractelement <32 x i8> %a, i32 3113 %c = insertelement <32 x i8> %a, i8 %b_lo, i32 114 %d = insertelement <32 x i8> %c, i8 %b_hi, i32 1715 ret <32 x i8> %d16}17 18define <16 x i16> @insert_extract_v16i16(<16 x i16> %a) nounwind {19; CHECK-LABEL: insert_extract_v16i16:20; CHECK: # %bb.0: # %entry21; CHECK-NEXT: xvextrins.h $xr0, $xr0, 2322; CHECK-NEXT: ret23entry:24 %b_lo = extractelement <16 x i16> %a, i32 725 %b_hi = extractelement <16 x i16> %a, i32 1526 %c = insertelement <16 x i16> %a, i16 %b_lo, i32 127 %d = insertelement <16 x i16> %c, i16 %b_hi, i32 928 ret <16 x i16> %d29}30 31define <8 x i32> @insert_extract_v8i32(<8 x i32> %a) nounwind {32; CHECK-LABEL: insert_extract_v8i32:33; CHECK: # %bb.0: # %entry34; CHECK-NEXT: xvextrins.w $xr0, $xr0, 1935; CHECK-NEXT: ret36entry:37 %b_lo = extractelement <8 x i32> %a, i32 338 %b_hi = extractelement <8 x i32> %a, i32 739 %c = insertelement <8 x i32> %a, i32 %b_lo, i32 140 %d = insertelement <8 x i32> %c, i32 %b_hi, i32 541 ret <8 x i32> %d42}43 44define <8 x float> @insert_extract_v8f32(<8 x float> %a) nounwind {45; CHECK-LABEL: insert_extract_v8f32:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: xvextrins.w $xr0, $xr0, 1948; CHECK-NEXT: ret49entry:50 %b_lo = extractelement <8 x float> %a, i32 351 %b_hi = extractelement <8 x float> %a, i32 752 %c = insertelement <8 x float> %a, float %b_lo, i32 153 %d = insertelement <8 x float> %c, float %b_hi, i32 554 ret <8 x float> %d55}56 57define <4 x i64> @insert_extract_v4i64(<4 x i64> %a) nounwind {58; LA32-LABEL: insert_extract_v4i64:59; LA32: # %bb.0: # %entry60; LA32-NEXT: xvpickve.w $xr1, $xr0, 261; LA32-NEXT: xvpickve.w $xr2, $xr0, 362; LA32-NEXT: xvpickve.w $xr3, $xr0, 663; LA32-NEXT: xvpickve.w $xr4, $xr0, 764; LA32-NEXT: xvinsve0.w $xr0, $xr1, 065; LA32-NEXT: xvinsve0.w $xr0, $xr2, 166; LA32-NEXT: xvinsve0.w $xr0, $xr3, 467; LA32-NEXT: xvinsve0.w $xr0, $xr4, 568; LA32-NEXT: ret69;70; LA64-LABEL: insert_extract_v4i64:71; LA64: # %bb.0: # %entry72; LA64-NEXT: xvextrins.d $xr0, $xr0, 173; LA64-NEXT: ret74entry:75 %b_lo = extractelement <4 x i64> %a, i32 176 %b_hi = extractelement <4 x i64> %a, i32 377 %c = insertelement <4 x i64> %a, i64 %b_lo, i32 078 %d = insertelement <4 x i64> %c, i64 %b_hi, i32 279 ret <4 x i64> %d80}81 82define <4 x double> @insert_extract_v4f64(<4 x double> %a) nounwind {83; CHECK-LABEL: insert_extract_v4f64:84; CHECK: # %bb.0: # %entry85; CHECK-NEXT: xvextrins.d $xr0, $xr0, 186; CHECK-NEXT: ret87entry:88 %b_lo = extractelement <4 x double> %a, i32 189 %b_hi = extractelement <4 x double> %a, i32 390 %c = insertelement <4 x double> %a, double %b_lo, i32 091 %d = insertelement <4 x double> %c, double %b_hi, i32 292 ret <4 x double> %d93}94