Skip to content

Commit e6bda96

Browse files
committed
Precommit tests
1 parent b26fe5b commit e6bda96

File tree

2 files changed

+148
-0
lines changed

2 files changed

+148
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-shuffles.ll

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,77 @@ define <4 x half> @vrgather_shuffle_vx_v4f16_load(ptr %p) {
395395
%s = shufflevector <4 x half> %v, <4 x half> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
396396
ret <4 x half> %s
397397
}
398+
399+
define <16 x float> @shuffle_disjoint_lanes(<16 x float> %v, <16 x float> %w) {
400+
; CHECK-LABEL: shuffle_disjoint_lanes:
401+
; CHECK: # %bb.0:
402+
; CHECK-NEXT: lui a0, %hi(.LCPI30_0)
403+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI30_0)
404+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
405+
; CHECK-NEXT: vle16.v v20, (a0)
406+
; CHECK-NEXT: lui a0, %hi(.LCPI30_1)
407+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI30_1)
408+
; CHECK-NEXT: vle16.v v22, (a0)
409+
; CHECK-NEXT: lui a0, 15
410+
; CHECK-NEXT: addi a0, a0, 240
411+
; CHECK-NEXT: vmv.s.x v0, a0
412+
; CHECK-NEXT: vrgatherei16.vv v16, v8, v20
413+
; CHECK-NEXT: vrgatherei16.vv v16, v12, v22, v0.t
414+
; CHECK-NEXT: vmv.v.v v8, v16
415+
; CHECK-NEXT: ret
416+
%out = shufflevector <16 x float> %v, <16 x float> %w, <16 x i32> <i32 11, i32 15, i32 7, i32 3, i32 26, i32 30, i32 22, i32 18, i32 9, i32 13, i32 5, i32 1, i32 24, i32 28, i32 20, i32 16>
417+
ret <16 x float> %out
418+
}
419+
420+
define <16 x float> @shuffle_disjoint_lanes_one_identity(<16 x float> %v, <16 x float> %w) {
421+
; CHECK-LABEL: shuffle_disjoint_lanes_one_identity:
422+
; CHECK: # %bb.0:
423+
; CHECK-NEXT: lui a0, %hi(.LCPI31_0)
424+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI31_0)
425+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
426+
; CHECK-NEXT: vle16.v v16, (a0)
427+
; CHECK-NEXT: li a0, -272
428+
; CHECK-NEXT: vmv.s.x v0, a0
429+
; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
430+
; CHECK-NEXT: ret
431+
%out = shufflevector <16 x float> %v, <16 x float> %w, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 26, i32 30, i32 22, i32 20, i32 8, i32 31, i32 29, i32 28, i32 27, i32 23, i32 25, i32 22>
432+
ret <16 x float> %out
433+
}
434+
435+
define <16 x float> @shuffle_disjoint_lanes_one_broadcast(<16 x float> %v, <16 x float> %w) {
436+
; CHECK-LABEL: shuffle_disjoint_lanes_one_broadcast:
437+
; CHECK: # %bb.0:
438+
; CHECK-NEXT: lui a0, %hi(.LCPI32_0)
439+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI32_0)
440+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
441+
; CHECK-NEXT: vle16.v v20, (a0)
442+
; CHECK-NEXT: lui a0, 15
443+
; CHECK-NEXT: addi a0, a0, 240
444+
; CHECK-NEXT: vmv.s.x v0, a0
445+
; CHECK-NEXT: vrgather.vi v16, v8, 7
446+
; CHECK-NEXT: vrgatherei16.vv v16, v12, v20, v0.t
447+
; CHECK-NEXT: vmv.v.v v8, v16
448+
; CHECK-NEXT: ret
449+
%out = shufflevector <16 x float> %v, <16 x float> %w, <16 x i32> <i32 7, i32 7, i32 7, i32 7, i32 26, i32 30, i32 22, i32 18, i32 7, i32 7, i32 7, i32 7, i32 24, i32 28, i32 20, i32 16>
450+
ret <16 x float> %out
451+
}
452+
453+
define <16 x float> @shuffle_disjoint_lanes_one_splat(float %v, <16 x float> %w) {
454+
; CHECK-LABEL: shuffle_disjoint_lanes_one_splat:
455+
; CHECK: # %bb.0:
456+
; CHECK-NEXT: lui a0, %hi(.LCPI33_0)
457+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI33_0)
458+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
459+
; CHECK-NEXT: vle16.v v16, (a0)
460+
; CHECK-NEXT: lui a0, 15
461+
; CHECK-NEXT: addi a0, a0, 240
462+
; CHECK-NEXT: vmv.s.x v0, a0
463+
; CHECK-NEXT: vfmv.v.f v12, fa0
464+
; CHECK-NEXT: vrgatherei16.vv v12, v8, v16, v0.t
465+
; CHECK-NEXT: vmv.v.v v8, v12
466+
; CHECK-NEXT: ret
467+
%head = insertelement <16 x float> poison, float %v, i32 0
468+
%splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
469+
%out = shufflevector <16 x float> %splat, <16 x float> %w, <16 x i32> <i32 11, i32 15, i32 7, i32 3, i32 26, i32 30, i32 22, i32 18, i32 9, i32 13, i32 5, i32 1, i32 24, i32 28, i32 20, i32 16>
470+
ret <16 x float> %out
471+
}

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-shuffles.ll

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,3 +1073,77 @@ define <16 x i64> @shuffle_zipodd_v16i64(<16 x i64> %v1, <16 x i64> %v2) {
10731073
%out = shufflevector <16 x i64> %v1, <16 x i64> %v2, <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31>
10741074
ret <16 x i64> %out
10751075
}
1076+
1077+
define <16 x i32> @shuffle_disjoint_lanes(<16 x i32> %v, <16 x i32> %w) {
1078+
; CHECK-LABEL: shuffle_disjoint_lanes:
1079+
; CHECK: # %bb.0:
1080+
; CHECK-NEXT: lui a0, %hi(.LCPI70_0)
1081+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI70_0)
1082+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1083+
; CHECK-NEXT: vle16.v v20, (a0)
1084+
; CHECK-NEXT: lui a0, %hi(.LCPI70_1)
1085+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI70_1)
1086+
; CHECK-NEXT: vle16.v v22, (a0)
1087+
; CHECK-NEXT: lui a0, 15
1088+
; CHECK-NEXT: addi a0, a0, 240
1089+
; CHECK-NEXT: vmv.s.x v0, a0
1090+
; CHECK-NEXT: vrgatherei16.vv v16, v8, v20
1091+
; CHECK-NEXT: vrgatherei16.vv v16, v12, v22, v0.t
1092+
; CHECK-NEXT: vmv.v.v v8, v16
1093+
; CHECK-NEXT: ret
1094+
%out = shufflevector <16 x i32> %v, <16 x i32> %w, <16 x i32> <i32 11, i32 15, i32 7, i32 3, i32 26, i32 30, i32 22, i32 18, i32 9, i32 13, i32 5, i32 1, i32 24, i32 28, i32 20, i32 16>
1095+
ret <16 x i32> %out
1096+
}
1097+
1098+
define <16 x i32> @shuffle_disjoint_lanes_one_identity(<16 x i32> %v, <16 x i32> %w) {
1099+
; CHECK-LABEL: shuffle_disjoint_lanes_one_identity:
1100+
; CHECK: # %bb.0:
1101+
; CHECK-NEXT: lui a0, %hi(.LCPI71_0)
1102+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI71_0)
1103+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1104+
; CHECK-NEXT: vle16.v v16, (a0)
1105+
; CHECK-NEXT: li a0, -272
1106+
; CHECK-NEXT: vmv.s.x v0, a0
1107+
; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
1108+
; CHECK-NEXT: ret
1109+
%out = shufflevector <16 x i32> %v, <16 x i32> %w, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 26, i32 30, i32 22, i32 20, i32 8, i32 31, i32 29, i32 28, i32 27, i32 23, i32 25, i32 22>
1110+
ret <16 x i32> %out
1111+
}
1112+
1113+
define <16 x i32> @shuffle_disjoint_lanes_one_broadcast(<16 x i32> %v, <16 x i32> %w) {
1114+
; CHECK-LABEL: shuffle_disjoint_lanes_one_broadcast:
1115+
; CHECK: # %bb.0:
1116+
; CHECK-NEXT: lui a0, %hi(.LCPI72_0)
1117+
; CHECK-NEXT: addi a0, a0, %lo(.LCPI72_0)
1118+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1119+
; CHECK-NEXT: vle16.v v20, (a0)
1120+
; CHECK-NEXT: lui a0, 15
1121+
; CHECK-NEXT: addi a0, a0, 240
1122+
; CHECK-NEXT: vmv.s.x v0, a0
1123+
; CHECK-NEXT: vrgather.vi v16, v8, 7
1124+
; CHECK-NEXT: vrgatherei16.vv v16, v12, v20, v0.t
1125+
; CHECK-NEXT: vmv.v.v v8, v16
1126+
; CHECK-NEXT: ret
1127+
%out = shufflevector <16 x i32> %v, <16 x i32> %w, <16 x i32> <i32 7, i32 7, i32 7, i32 7, i32 26, i32 30, i32 22, i32 18, i32 7, i32 7, i32 7, i32 7, i32 24, i32 28, i32 20, i32 16>
1128+
ret <16 x i32> %out
1129+
}
1130+
1131+
define <16 x i32> @shuffle_disjoint_lanes_one_splat(i32 %v, <16 x i32> %w) {
1132+
; CHECK-LABEL: shuffle_disjoint_lanes_one_splat:
1133+
; CHECK: # %bb.0:
1134+
; CHECK-NEXT: lui a1, %hi(.LCPI73_0)
1135+
; CHECK-NEXT: addi a1, a1, %lo(.LCPI73_0)
1136+
; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1137+
; CHECK-NEXT: vle16.v v16, (a1)
1138+
; CHECK-NEXT: lui a1, 15
1139+
; CHECK-NEXT: addi a1, a1, 240
1140+
; CHECK-NEXT: vmv.s.x v0, a1
1141+
; CHECK-NEXT: vmv.v.x v12, a0
1142+
; CHECK-NEXT: vrgatherei16.vv v12, v8, v16, v0.t
1143+
; CHECK-NEXT: vmv.v.v v8, v12
1144+
; CHECK-NEXT: ret
1145+
%head = insertelement <16 x i32> poison, i32 %v, i32 0
1146+
%splat = shufflevector <16 x i32> %head, <16 x i32> poison, <16 x i32> zeroinitializer
1147+
%out = shufflevector <16 x i32> %splat, <16 x i32> %w, <16 x i32> <i32 11, i32 15, i32 7, i32 3, i32 26, i32 30, i32 22, i32 18, i32 9, i32 13, i32 5, i32 1, i32 24, i32 28, i32 20, i32 16>
1148+
ret <16 x i32> %out
1149+
}

0 commit comments

Comments
 (0)