Skip to content

Commit c6f05aa

Browse files
Added alignment argument to TTI for compress/expand
1 parent 3225401 commit c6f05aa

File tree

3 files changed

+50
-39
lines changed

3 files changed

+50
-39
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1621,9 +1621,27 @@ bool RISCVTTIImpl::isLSRCostLess(const TargetTransformInfo::LSRCost &C1,
16211621
C2.ScaleCost, C2.ImmCost, C2.SetupCost);
16221622
}
16231623

1624-
bool RISCVTTIImpl::isLegalMaskedCompressStore(Type *DataTy) {
1624+
bool RISCVTTIImpl::isLegalMaskedCompressStore(Type *DataTy, Align Alignment) {
16251625
auto *VTy = dyn_cast<VectorType>(DataTy);
16261626
if (!VTy || VTy->isScalableTy() || !ST->hasVInstructions())
16271627
return false;
1628+
1629+
Type *ScalarTy = VTy->getScalarType();
1630+
if (ScalarTy->isFloatTy() || ScalarTy->isDoubleTy())
1631+
return true;
1632+
1633+
if (!ScalarTy->isIntegerTy())
1634+
return false;
1635+
1636+
switch (ScalarTy->getIntegerBitWidth()) {
1637+
case 8:
1638+
case 16:
1639+
case 32:
1640+
case 64:
1641+
break;
1642+
default:
1643+
return false;
1644+
}
1645+
16281646
return getRegUsageForType(VTy) <= 8;
16291647
}

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ class RISCVTTIImpl : public BasicTTIImplBase<RISCVTTIImpl> {
261261
return TLI->isLegalStridedLoadStore(DataTypeVT, Alignment);
262262
}
263263

264-
bool isLegalMaskedCompressStore(Type *DataTy);
264+
bool isLegalMaskedCompressStore(Type *DataTy, Align Alignment);
265265

266266
bool isVScaleKnownToBeAPowerOfTwo() const {
267267
return TLI->isVScaleKnownToBeAPowerOfTwo();

llvm/test/CodeGen/RISCV/rvv/compressstore.ll

Lines changed: 30 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ define void @test_compresstore_i8_v1(ptr %p, <1 x i1> %mask, <1 x i8> %data) {
2323
; RV32-NEXT: vse8.v v9, (a0)
2424
; RV32-NEXT: ret
2525
entry:
26-
tail call void @llvm.masked.compressstore.v1i8(<1 x i8> %data, ptr %p, <1 x i1> %mask)
26+
tail call void @llvm.masked.compressstore.v1i8(<1 x i8> %data, ptr align 1 %p, <1 x i1> %mask)
2727
ret void
2828
}
2929

@@ -46,7 +46,7 @@ define void @test_compresstore_i8_v2(ptr %p, <2 x i1> %mask, <2 x i8> %data) {
4646
; RV32-NEXT: vse8.v v9, (a0)
4747
; RV32-NEXT: ret
4848
entry:
49-
tail call void @llvm.masked.compressstore.v2i8(<2 x i8> %data, ptr %p, <2 x i1> %mask)
49+
tail call void @llvm.masked.compressstore.v2i8(<2 x i8> %data, ptr align 1 %p, <2 x i1> %mask)
5050
ret void
5151
}
5252

@@ -69,7 +69,7 @@ define void @test_compresstore_i8_v4(ptr %p, <4 x i1> %mask, <4 x i8> %data) {
6969
; RV32-NEXT: vse8.v v9, (a0)
7070
; RV32-NEXT: ret
7171
entry:
72-
tail call void @llvm.masked.compressstore.v4i8(<4 x i8> %data, ptr %p, <4 x i1> %mask)
72+
tail call void @llvm.masked.compressstore.v4i8(<4 x i8> %data, ptr align 1 %p, <4 x i1> %mask)
7373
ret void
7474
}
7575

@@ -92,7 +92,7 @@ define void @test_compresstore_i8_v8(ptr %p, <8 x i1> %mask, <8 x i8> %data) {
9292
; RV32-NEXT: vse8.v v9, (a0)
9393
; RV32-NEXT: ret
9494
entry:
95-
tail call void @llvm.masked.compressstore.v8i8(<8 x i8> %data, ptr %p, <8 x i1> %mask)
95+
tail call void @llvm.masked.compressstore.v8i8(<8 x i8> %data, ptr align 1 %p, <8 x i1> %mask)
9696
ret void
9797
}
9898

@@ -115,7 +115,7 @@ define void @test_compresstore_i8_v16(ptr %p, <16 x i1> %mask, <16 x i8> %data)
115115
; RV32-NEXT: vse8.v v9, (a0)
116116
; RV32-NEXT: ret
117117
entry:
118-
tail call void @llvm.masked.compressstore.v16i8(<16 x i8> %data, ptr %p, <16 x i1> %mask)
118+
tail call void @llvm.masked.compressstore.v16i8(<16 x i8> %data, ptr align 1 %p, <16 x i1> %mask)
119119
ret void
120120
}
121121

@@ -140,7 +140,7 @@ define void @test_compresstore_i8_v32(ptr %p, <32 x i1> %mask, <32 x i8> %data)
140140
; RV32-NEXT: vse8.v v10, (a0)
141141
; RV32-NEXT: ret
142142
entry:
143-
tail call void @llvm.masked.compressstore.v32i8(<32 x i8> %data, ptr %p, <32 x i1> %mask)
143+
tail call void @llvm.masked.compressstore.v32i8(<32 x i8> %data, ptr align 1 %p, <32 x i1> %mask)
144144
ret void
145145
}
146146

@@ -165,7 +165,7 @@ define void @test_compresstore_i8_v64(ptr %p, <64 x i1> %mask, <64 x i8> %data)
165165
; RV32-NEXT: vse8.v v12, (a0)
166166
; RV32-NEXT: ret
167167
entry:
168-
tail call void @llvm.masked.compressstore.v64i8(<64 x i8> %data, ptr %p, <64 x i1> %mask)
168+
tail call void @llvm.masked.compressstore.v64i8(<64 x i8> %data, ptr align 1 %p, <64 x i1> %mask)
169169
ret void
170170
}
171171

@@ -190,7 +190,7 @@ define void @test_compresstore_i8_v128(ptr %p, <128 x i1> %mask, <128 x i8> %dat
190190
; RV32-NEXT: vse8.v v16, (a0)
191191
; RV32-NEXT: ret
192192
entry:
193-
tail call void @llvm.masked.compressstore.v128i8(<128 x i8> %data, ptr %p, <128 x i1> %mask)
193+
tail call void @llvm.masked.compressstore.v128i8(<128 x i8> %data, ptr align 1 %p, <128 x i1> %mask)
194194
ret void
195195
}
196196

@@ -8604,7 +8604,7 @@ define void @test_compresstore_i8_v256(ptr %p, <256 x i1> %mask, <256 x i8> %dat
86048604
; RV32-NEXT: .LBB8_526: # %cond.store760
86058605
; RV32-NEXT: j .LBB8_283
86068606
entry:
8607-
tail call void @llvm.masked.compressstore.v256i8(<256 x i8> %data, ptr %p, <256 x i1> %mask)
8607+
tail call void @llvm.masked.compressstore.v256i8(<256 x i8> %data, ptr align 1 %p, <256 x i1> %mask)
86088608
ret void
86098609
}
86108610

@@ -8629,7 +8629,7 @@ define void @test_compresstore_i16_v1(ptr %p, <1 x i1> %mask, <1 x i16> %data) {
86298629
; RV32-NEXT: vse16.v v9, (a0)
86308630
; RV32-NEXT: ret
86318631
entry:
8632-
tail call void @llvm.masked.compressstore.v1i16(<1 x i16> %data, ptr %p, <1 x i1> %mask)
8632+
tail call void @llvm.masked.compressstore.v1i16(<1 x i16> %data, ptr align 2 %p, <1 x i1> %mask)
86338633
ret void
86348634
}
86358635

@@ -8652,7 +8652,7 @@ define void @test_compresstore_i16_v2(ptr %p, <2 x i1> %mask, <2 x i16> %data) {
86528652
; RV32-NEXT: vse16.v v9, (a0)
86538653
; RV32-NEXT: ret
86548654
entry:
8655-
tail call void @llvm.masked.compressstore.v2i16(<2 x i16> %data, ptr %p, <2 x i1> %mask)
8655+
tail call void @llvm.masked.compressstore.v2i16(<2 x i16> %data, ptr align 2 %p, <2 x i1> %mask)
86568656
ret void
86578657
}
86588658

@@ -8675,7 +8675,7 @@ define void @test_compresstore_i16_v4(ptr %p, <4 x i1> %mask, <4 x i16> %data) {
86758675
; RV32-NEXT: vse16.v v9, (a0)
86768676
; RV32-NEXT: ret
86778677
entry:
8678-
tail call void @llvm.masked.compressstore.v4i16(<4 x i16> %data, ptr %p, <4 x i1> %mask)
8678+
tail call void @llvm.masked.compressstore.v4i16(<4 x i16> %data, ptr align 2 %p, <4 x i1> %mask)
86798679
ret void
86808680
}
86818681

@@ -8698,7 +8698,7 @@ define void @test_compresstore_i16_v8(ptr %p, <8 x i1> %mask, <8 x i16> %data) {
86988698
; RV32-NEXT: vse16.v v9, (a0)
86998699
; RV32-NEXT: ret
87008700
entry:
8701-
tail call void @llvm.masked.compressstore.v8i16(<8 x i16> %data, ptr %p, <8 x i1> %mask)
8701+
tail call void @llvm.masked.compressstore.v8i16(<8 x i16> %data, ptr align 2 %p, <8 x i1> %mask)
87028702
ret void
87038703
}
87048704

@@ -8721,7 +8721,7 @@ define void @test_compresstore_i16_v16(ptr %p, <16 x i1> %mask, <16 x i16> %data
87218721
; RV32-NEXT: vse16.v v10, (a0)
87228722
; RV32-NEXT: ret
87238723
entry:
8724-
tail call void @llvm.masked.compressstore.v16i16(<16 x i16> %data, ptr %p, <16 x i1> %mask)
8724+
tail call void @llvm.masked.compressstore.v16i16(<16 x i16> %data, ptr align 2 %p, <16 x i1> %mask)
87258725
ret void
87268726
}
87278727

@@ -8746,7 +8746,7 @@ define void @test_compresstore_i16_v32(ptr %p, <32 x i1> %mask, <32 x i16> %data
87468746
; RV32-NEXT: vse16.v v12, (a0)
87478747
; RV32-NEXT: ret
87488748
entry:
8749-
tail call void @llvm.masked.compressstore.v32i16(<32 x i16> %data, ptr %p, <32 x i1> %mask)
8749+
tail call void @llvm.masked.compressstore.v32i16(<32 x i16> %data, ptr align 2 %p, <32 x i1> %mask)
87508750
ret void
87518751
}
87528752

@@ -8771,7 +8771,7 @@ define void @test_compresstore_i16_v64(ptr %p, <64 x i1> %mask, <64 x i16> %data
87718771
; RV32-NEXT: vse16.v v16, (a0)
87728772
; RV32-NEXT: ret
87738773
entry:
8774-
tail call void @llvm.masked.compressstore.v64i16(<64 x i16> %data, ptr %p, <64 x i1> %mask)
8774+
tail call void @llvm.masked.compressstore.v64i16(<64 x i16> %data, ptr align 2 %p, <64 x i1> %mask)
87758775
ret void
87768776
}
87778777

@@ -13007,7 +13007,7 @@ define void @test_compresstore_i16_v128(ptr %p, <128 x i1> %mask, <128 x i16> %d
1300713007
; RV32-NEXT: .LBB16_258: # %cond.store376
1300813008
; RV32-NEXT: j .LBB16_141
1300913009
entry:
13010-
tail call void @llvm.masked.compressstore.v128i16(<128 x i16> %data, ptr %p, <128 x i1> %mask)
13010+
tail call void @llvm.masked.compressstore.v128i16(<128 x i16> %data, ptr align 2 %p, <128 x i1> %mask)
1301113011
ret void
1301213012
}
1301313013

@@ -13032,7 +13032,7 @@ define void @test_compresstore_i32_v1(ptr %p, <1 x i1> %mask, <1 x i32> %data) {
1303213032
; RV32-NEXT: vse32.v v9, (a0)
1303313033
; RV32-NEXT: ret
1303413034
entry:
13035-
tail call void @llvm.masked.compressstore.v1i32(<1 x i32> %data, ptr %p, <1 x i1> %mask)
13035+
tail call void @llvm.masked.compressstore.v1i32(<1 x i32> %data, ptr align 4 %p, <1 x i1> %mask)
1303613036
ret void
1303713037
}
1303813038

@@ -13055,7 +13055,7 @@ define void @test_compresstore_i32_v2(ptr %p, <2 x i1> %mask, <2 x i32> %data) {
1305513055
; RV32-NEXT: vse32.v v9, (a0)
1305613056
; RV32-NEXT: ret
1305713057
entry:
13058-
tail call void @llvm.masked.compressstore.v2i32(<2 x i32> %data, ptr %p, <2 x i1> %mask)
13058+
tail call void @llvm.masked.compressstore.v2i32(<2 x i32> %data, ptr align 4 %p, <2 x i1> %mask)
1305913059
ret void
1306013060
}
1306113061

@@ -13078,7 +13078,7 @@ define void @test_compresstore_i32_v4(ptr %p, <4 x i1> %mask, <4 x i32> %data) {
1307813078
; RV32-NEXT: vse32.v v9, (a0)
1307913079
; RV32-NEXT: ret
1308013080
entry:
13081-
tail call void @llvm.masked.compressstore.v4i32(<4 x i32> %data, ptr %p, <4 x i1> %mask)
13081+
tail call void @llvm.masked.compressstore.v4i32(<4 x i32> %data, ptr align 4 %p, <4 x i1> %mask)
1308213082
ret void
1308313083
}
1308413084

@@ -13101,7 +13101,7 @@ define void @test_compresstore_i32_v8(ptr %p, <8 x i1> %mask, <8 x i32> %data) {
1310113101
; RV32-NEXT: vse32.v v10, (a0)
1310213102
; RV32-NEXT: ret
1310313103
entry:
13104-
tail call void @llvm.masked.compressstore.v8i32(<8 x i32> %data, ptr %p, <8 x i1> %mask)
13104+
tail call void @llvm.masked.compressstore.v8i32(<8 x i32> %data, ptr align 4 %p, <8 x i1> %mask)
1310513105
ret void
1310613106
}
1310713107

@@ -13124,7 +13124,7 @@ define void @test_compresstore_i32_v16(ptr %p, <16 x i1> %mask, <16 x i32> %data
1312413124
; RV32-NEXT: vse32.v v12, (a0)
1312513125
; RV32-NEXT: ret
1312613126
entry:
13127-
tail call void @llvm.masked.compressstore.v16i32(<16 x i32> %data, ptr %p, <16 x i1> %mask)
13127+
tail call void @llvm.masked.compressstore.v16i32(<16 x i32> %data, ptr align 4 %p, <16 x i1> %mask)
1312813128
ret void
1312913129
}
1313013130

@@ -13149,7 +13149,7 @@ define void @test_compresstore_i32_v32(ptr %p, <32 x i1> %mask, <32 x i32> %data
1314913149
; RV32-NEXT: vse32.v v16, (a0)
1315013150
; RV32-NEXT: ret
1315113151
entry:
13152-
tail call void @llvm.masked.compressstore.v32i32(<32 x i32> %data, ptr %p, <32 x i1> %mask)
13152+
tail call void @llvm.masked.compressstore.v32i32(<32 x i32> %data, ptr align 4 %p, <32 x i1> %mask)
1315313153
ret void
1315413154
}
1315513155

@@ -15663,7 +15663,7 @@ define void @test_compresstore_i32_v64(ptr %p, <64 x i1> %mask, <64 x i32> %data
1566315663
; RV32-NEXT: bltz a1, .LBB23_70
1566415664
; RV32-NEXT: j .LBB23_71
1566515665
entry:
15666-
tail call void @llvm.masked.compressstore.v64i32(<64 x i32> %data, ptr %p, <64 x i1> %mask)
15666+
tail call void @llvm.masked.compressstore.v64i32(<64 x i32> %data, ptr align 4 %p, <64 x i1> %mask)
1566715667
ret void
1566815668
}
1566915669

@@ -15688,7 +15688,7 @@ define void @test_compresstore_i64_v1(ptr %p, <1 x i1> %mask, <1 x i64> %data) {
1568815688
; RV32-NEXT: vse64.v v9, (a0)
1568915689
; RV32-NEXT: ret
1569015690
entry:
15691-
tail call void @llvm.masked.compressstore.v1i64(<1 x i64> %data, ptr %p, <1 x i1> %mask)
15691+
tail call void @llvm.masked.compressstore.v1i64(<1 x i64> %data, ptr align 8 %p, <1 x i1> %mask)
1569215692
ret void
1569315693
}
1569415694

@@ -15711,7 +15711,7 @@ define void @test_compresstore_i64_v2(ptr %p, <2 x i1> %mask, <2 x i64> %data) {
1571115711
; RV32-NEXT: vse64.v v9, (a0)
1571215712
; RV32-NEXT: ret
1571315713
entry:
15714-
tail call void @llvm.masked.compressstore.v2i64(<2 x i64> %data, ptr %p, <2 x i1> %mask)
15714+
tail call void @llvm.masked.compressstore.v2i64(<2 x i64> %data, ptr align 8 %p, <2 x i1> %mask)
1571515715
ret void
1571615716
}
1571715717

@@ -15734,7 +15734,7 @@ define void @test_compresstore_i64_v4(ptr %p, <4 x i1> %mask, <4 x i64> %data) {
1573415734
; RV32-NEXT: vse64.v v10, (a0)
1573515735
; RV32-NEXT: ret
1573615736
entry:
15737-
tail call void @llvm.masked.compressstore.v4i64(<4 x i64> %data, ptr %p, <4 x i1> %mask)
15737+
tail call void @llvm.masked.compressstore.v4i64(<4 x i64> %data, ptr align 8 %p, <4 x i1> %mask)
1573815738
ret void
1573915739
}
1574015740

@@ -15757,7 +15757,7 @@ define void @test_compresstore_i64_v8(ptr %p, <8 x i1> %mask, <8 x i64> %data) {
1575715757
; RV32-NEXT: vse64.v v12, (a0)
1575815758
; RV32-NEXT: ret
1575915759
entry:
15760-
tail call void @llvm.masked.compressstore.v8i64(<8 x i64> %data, ptr %p, <8 x i1> %mask)
15760+
tail call void @llvm.masked.compressstore.v8i64(<8 x i64> %data, ptr align 8 %p, <8 x i1> %mask)
1576115761
ret void
1576215762
}
1576315763

@@ -15780,7 +15780,7 @@ define void @test_compresstore_i64_v16(ptr %p, <16 x i1> %mask, <16 x i64> %data
1578015780
; RV32-NEXT: vse64.v v16, (a0)
1578115781
; RV32-NEXT: ret
1578215782
entry:
15783-
tail call void @llvm.masked.compressstore.v16i64(<16 x i64> %data, ptr %p, <16 x i1> %mask)
15783+
tail call void @llvm.masked.compressstore.v16i64(<16 x i64> %data, ptr align 8 %p, <16 x i1> %mask)
1578415784
ret void
1578515785
}
1578615786

@@ -17499,7 +17499,7 @@ define void @test_compresstore_i64_v32(ptr %p, <32 x i1> %mask, <32 x i64> %data
1749917499
; RV32-NEXT: sb a1, 5(a0)
1750017500
; RV32-NEXT: ret
1750117501
entry:
17502-
tail call void @llvm.masked.compressstore.v32i64(<32 x i64> %data, ptr %p, <32 x i1> %mask)
17502+
tail call void @llvm.masked.compressstore.v32i64(<32 x i64> %data, ptr align 8 %p, <32 x i1> %mask)
1750317503
ret void
1750417504
}
1750517505

@@ -17536,10 +17536,3 @@ declare void @llvm.masked.compressstore.v4i64(<4 x i64>, ptr, <4 x i1>)
1753617536
declare void @llvm.masked.compressstore.v8i64(<8 x i64>, ptr, <8 x i1>)
1753717537
declare void @llvm.masked.compressstore.v16i64(<16 x i64>, ptr, <16 x i1>)
1753817538
declare void @llvm.masked.compressstore.v32i64(<32 x i64>, ptr, <32 x i1>)
17539-
17540-
;define void @test_compresstore_iYYYY_vXXXX(ptr %p, <XXXX x i1> %mask, <XXXX x iYYYY> %data) {
17541-
;entry:
17542-
; tail call void @llvm.masked.compressstore.vXXXXiYYYY(<XXXX x iYYYY> %data, ptr %p, <XXXX x i1> %mask)
17543-
; ret void
17544-
;}
17545-
;declare void @llvm.masked.compressstore.vXXXXiYYYY(<XXXX x iYYYY>, ptr, <XXXX x i1>)

0 commit comments

Comments
 (0)