[PATCH] D116735: [RISCV] Adjust RV64I data layout by using n32:64 in layout string
This revision was automatically updated to reflect the committed changes. Closed by commit rG974e2e690b40: [RISCV] Adjust RV64I data layout by using n32:64 in layout string (authored by craig.topper). Changed prior to commit: https://reviews.llvm.org/D116735?vs=471385=471564#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116735/new/ https://reviews.llvm.org/D116735 Files: clang/lib/Basic/Targets/RISCV.h llvm/docs/ReleaseNotes.rst llvm/lib/IR/AutoUpgrade.cpp llvm/lib/Target/RISCV/RISCVTargetMachine.cpp llvm/test/CodeGen/RISCV/aext-to-sext.ll llvm/test/CodeGen/RISCV/loop-strength-reduce-add-cheaper-than-mul.ll llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp Index: llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp === --- llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp +++ llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp @@ -31,6 +31,11 @@ // Check that AMDGPU targets add -G1 if it's not present. EXPECT_EQ(UpgradeDataLayoutString("e-p:32:32", "r600"), "e-p:32:32-G1"); EXPECT_EQ(UpgradeDataLayoutString("e-p:64:64", "amdgcn"), "e-p:64:64-G1"); + + // Check that RISCV64 upgrades -n64 to -n32:64. + EXPECT_EQ(UpgradeDataLayoutString("e-m:e-p:64:64-i64:64-i128:128-n64-S128", +"riscv64"), +"e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"); } TEST(DataLayoutUpgradeTest, NoDataLayoutUpgrade) { Index: llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll === --- llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll +++ llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll @@ -286,14 +286,12 @@ ; RV64-NEXT:addi a1, a1, %lo(.LCPI12_0) ; RV64-NEXT:vsetivli zero, 4, e32, m1, ta, ma ; RV64-NEXT:vlse32.v v8, (a1), zero -; RV64-NEXT:li a1, 0 -; RV64-NEXT:li a2, 1024 +; RV64-NEXT:li a1, 1024 ; RV64-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1 -; RV64-NEXT:slli a3, a1, 2 -; RV64-NEXT:add a3, a0, a3 -; RV64-NEXT:addiw a1, a1, 4 -; RV64-NEXT:vse32.v v8, (a3) -; RV64-NEXT:bne a1, a2, .LBB12_1 +; RV64-NEXT:vse32.v v8, (a0) +; RV64-NEXT:addiw a1, a1, -4 +; RV64-NEXT:addi a0, a0, 16 +; RV64-NEXT:bnez a1, .LBB12_1 ; RV64-NEXT: # %bb.2: ; RV64-NEXT:ret br label %2 Index: llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll === --- llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll +++ llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll @@ -794,20 +794,20 @@ ; CHECK-NEXT: # %bb.4: ; CHECK-NEXT:beq a4, a5, .LBB12_7 ; CHECK-NEXT: .LBB12_5: -; CHECK-NEXT:slli a2, a3, 2 -; CHECK-NEXT:add a2, a2, a3 -; CHECK-NEXT:add a1, a1, a2 -; CHECK-NEXT:li a2, 1024 +; CHECK-NEXT:addiw a2, a3, -1024 +; CHECK-NEXT:add a0, a0, a3 +; CHECK-NEXT:slli a4, a3, 2 +; CHECK-NEXT:add a3, a4, a3 +; CHECK-NEXT:add a1, a1, a3 ; CHECK-NEXT: .LBB12_6: # =>This Inner Loop Header: Depth=1 -; CHECK-NEXT:lb a4, 0(a1) -; CHECK-NEXT:add a5, a0, a3 -; CHECK-NEXT:lb a6, 0(a5) -; CHECK-NEXT:addw a4, a6, a4 -; CHECK-NEXT:sb a4, 0(a5) -; CHECK-NEXT:addiw a4, a3, 1 -; CHECK-NEXT:addi a3, a3, 1 +; CHECK-NEXT:lb a3, 0(a1) +; CHECK-NEXT:lb a4, 0(a0) +; CHECK-NEXT:addw a3, a4, a3 +; CHECK-NEXT:sb a3, 0(a0) +; CHECK-NEXT:addiw a2, a2, 1 +; CHECK-NEXT:addi a0, a0, 1 ; CHECK-NEXT:addi a1, a1, 5 -; CHECK-NEXT:bne a4, a2, .LBB12_6 +; CHECK-NEXT:bnez a2, .LBB12_6 ; CHECK-NEXT: .LBB12_7: ; CHECK-NEXT:ret %4 = icmp eq i32 %2, 1024 Index: llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll === --- llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll +++ llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll @@ -53,25 +53,24 @@ ; RV64: # %bb.0: # %entry ; RV64-NEXT:blez a1, .LBB0_3 ; RV64-NEXT: # %bb.1: # %cond_true.preheader -; RV64-NEXT:li a4, 0 +; RV64-NEXT:li a2, 0 ; RV64-NEXT:slli a0, a0, 6 -; RV64-NEXT:lui a2, %hi(A) -; RV64-NEXT:addi a2, a2, %lo(A) -; RV64-NEXT:add a0, a2, a0 -; RV64-NEXT:li a2, 4 -; RV64-NEXT:li a3, 5 +; RV64-NEXT:lui a3, %hi(A) +; RV64-NEXT:addi a3, a3, %lo(A) +; RV64-NEXT:add a0, a3, a0 +; RV64-NEXT:addi a3, a0, 4 +; RV64-NEXT:li a4, 4 +; RV64-NEXT:li a5, 5 ; RV64-NEXT: .LBB0_2: # %cond_true ; RV64-NEXT:# =>This Inner Loop Header: Depth=1 -; RV64-NEXT:addiw a5, a4, 1 -; RV64-NEXT:slli a6, a5, 2 +; RV64-NEXT:sw a4, 0(a3) +; RV64-NEXT:addiw
[PATCH] D116735: [RISCV] Adjust RV64I data layout by using n32:64 in layout string
frasercrmck accepted this revision. frasercrmck added a comment. LGTM other than a nit, but I concur that a comment in AutoUpgrade would be nice. Comment at: llvm/docs/ReleaseNotes.rst:123 +* i32 is now a native type in the datalayout string. This enables + LoopStrengthReduce for loops with i32 induction variables. And other + optimizations. something like `, among other optimizations` to avoid full stop + "and"? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116735/new/ https://reviews.llvm.org/D116735 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D116735: [RISCV] Adjust RV64I data layout by using n32:64 in layout string
craig.topper updated this revision to Diff 471385. craig.topper added a comment. Refine ReleaseNotes Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116735/new/ https://reviews.llvm.org/D116735 Files: clang/lib/Basic/Targets/RISCV.h llvm/docs/ReleaseNotes.rst llvm/lib/IR/AutoUpgrade.cpp llvm/lib/Target/RISCV/RISCVTargetMachine.cpp llvm/test/CodeGen/RISCV/aext-to-sext.ll llvm/test/CodeGen/RISCV/loop-strength-reduce-add-cheaper-than-mul.ll llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp Index: llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp === --- llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp +++ llvm/unittests/Bitcode/DataLayoutUpgradeTest.cpp @@ -31,6 +31,11 @@ // Check that AMDGPU targets add -G1 if it's not present. EXPECT_EQ(UpgradeDataLayoutString("e-p:32:32", "r600"), "e-p:32:32-G1"); EXPECT_EQ(UpgradeDataLayoutString("e-p:64:64", "amdgcn"), "e-p:64:64-G1"); + + // Check that RISCV64 upgrades -n64 to -n32:64. + EXPECT_EQ(UpgradeDataLayoutString("e-m:e-p:64:64-i64:64-i128:128-n64-S128", +"riscv64"), +"e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"); } TEST(DataLayoutUpgradeTest, NoDataLayoutUpgrade) { Index: llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll === --- llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll +++ llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll @@ -286,14 +286,12 @@ ; RV64-NEXT:addi a1, a1, %lo(.LCPI12_0) ; RV64-NEXT:vsetivli zero, 4, e32, m1, ta, ma ; RV64-NEXT:vlse32.v v8, (a1), zero -; RV64-NEXT:li a1, 0 -; RV64-NEXT:li a2, 1024 +; RV64-NEXT:li a1, 1024 ; RV64-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1 -; RV64-NEXT:slli a3, a1, 2 -; RV64-NEXT:add a3, a0, a3 -; RV64-NEXT:addiw a1, a1, 4 -; RV64-NEXT:vse32.v v8, (a3) -; RV64-NEXT:bne a1, a2, .LBB12_1 +; RV64-NEXT:vse32.v v8, (a0) +; RV64-NEXT:addiw a1, a1, -4 +; RV64-NEXT:addi a0, a0, 16 +; RV64-NEXT:bnez a1, .LBB12_1 ; RV64-NEXT: # %bb.2: ; RV64-NEXT:ret br label %2 Index: llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll === --- llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll +++ llvm/test/CodeGen/RISCV/rvv/fixed-vector-strided-load-store-asm.ll @@ -794,20 +794,20 @@ ; CHECK-NEXT: # %bb.4: ; CHECK-NEXT:beq a4, a5, .LBB12_7 ; CHECK-NEXT: .LBB12_5: -; CHECK-NEXT:slli a2, a3, 2 -; CHECK-NEXT:add a2, a2, a3 -; CHECK-NEXT:add a1, a1, a2 -; CHECK-NEXT:li a2, 1024 +; CHECK-NEXT:addiw a2, a3, -1024 +; CHECK-NEXT:add a0, a0, a3 +; CHECK-NEXT:slli a4, a3, 2 +; CHECK-NEXT:add a3, a4, a3 +; CHECK-NEXT:add a1, a1, a3 ; CHECK-NEXT: .LBB12_6: # =>This Inner Loop Header: Depth=1 -; CHECK-NEXT:lb a4, 0(a1) -; CHECK-NEXT:add a5, a0, a3 -; CHECK-NEXT:lb a6, 0(a5) -; CHECK-NEXT:addw a4, a6, a4 -; CHECK-NEXT:sb a4, 0(a5) -; CHECK-NEXT:addiw a4, a3, 1 -; CHECK-NEXT:addi a3, a3, 1 +; CHECK-NEXT:lb a3, 0(a1) +; CHECK-NEXT:lb a4, 0(a0) +; CHECK-NEXT:addw a3, a4, a3 +; CHECK-NEXT:sb a3, 0(a0) +; CHECK-NEXT:addiw a2, a2, 1 +; CHECK-NEXT:addi a0, a0, 1 ; CHECK-NEXT:addi a1, a1, 5 -; CHECK-NEXT:bne a4, a2, .LBB12_6 +; CHECK-NEXT:bnez a2, .LBB12_6 ; CHECK-NEXT: .LBB12_7: ; CHECK-NEXT:ret %4 = icmp eq i32 %2, 1024 Index: llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll === --- llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll +++ llvm/test/CodeGen/RISCV/loop-strength-reduce-loop-invar.ll @@ -53,25 +53,24 @@ ; RV64: # %bb.0: # %entry ; RV64-NEXT:blez a1, .LBB0_3 ; RV64-NEXT: # %bb.1: # %cond_true.preheader -; RV64-NEXT:li a4, 0 +; RV64-NEXT:li a2, 0 ; RV64-NEXT:slli a0, a0, 6 -; RV64-NEXT:lui a2, %hi(A) -; RV64-NEXT:addi a2, a2, %lo(A) -; RV64-NEXT:add a0, a2, a0 -; RV64-NEXT:li a2, 4 -; RV64-NEXT:li a3, 5 +; RV64-NEXT:lui a3, %hi(A) +; RV64-NEXT:addi a3, a3, %lo(A) +; RV64-NEXT:add a0, a3, a0 +; RV64-NEXT:addi a3, a0, 4 +; RV64-NEXT:li a4, 4 +; RV64-NEXT:li a5, 5 ; RV64-NEXT: .LBB0_2: # %cond_true ; RV64-NEXT:# =>This Inner Loop Header: Depth=1 -; RV64-NEXT:addiw a5, a4, 1 -; RV64-NEXT:slli a6, a5, 2 +; RV64-NEXT:sw a4, 0(a3) +; RV64-NEXT:addiw a6, a2, 2 +; RV64-NEXT:slli a6, a6, 2 ; RV64-NEXT:add a6, a0, a6 -; RV64-NEXT:sw a2, 0(a6) -; RV64-NEXT:addiw a4, a4, 2 -; RV64-NEXT:slli a4, a4, 2 -; RV64-NEXT:
[PATCH] D116735: [RISCV] Adjust RV64I data layout by using n32:64 in layout string
jrtc27 added inline comments. Comment at: llvm/docs/ReleaseNotes.rst:122 been removed. +* n32 was added to the RV64I datalayout string. arichardson wrote: > Without additional context I don't think this makes much sense to most > readers. Before looking at this patch description I would not have been and > to say what n is used for. > > Maybe something like "i32 has been marked as a legal integer type for RV64, > improving code generation for some benchmarks"? "native integer type" not "legal integer type"; it still gets legalised during ISel Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116735/new/ https://reviews.llvm.org/D116735 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D116735: [RISCV] Adjust RV64I data layout by using n32:64 in layout string
arichardson added inline comments. Comment at: llvm/docs/ReleaseNotes.rst:122 been removed. +* n32 was added to the RV64I datalayout string. Without additional context I don't think this makes much sense to most readers. Before looking at this patch description I would not have been and to say what n is used for. Maybe something like "i32 has been marked as a legal integer type for RV64, improving code generation for some benchmarks"? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116735/new/ https://reviews.llvm.org/D116735 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits