diff --git a/main/llvm16/APKBUILD b/main/llvm16/APKBUILD index 0091a8c51ea7..99dac3dff6e6 100644 --- a/main/llvm16/APKBUILD +++ b/main/llvm16/APKBUILD @@ -37,6 +37,7 @@ source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/l 9003-LV-Add-test-where-pointer-is-incorrectly-marked-as-u.patch 9004-LV-Don-t-consider-pointer-as-uniform-if-it-is-also-s.patch 9011-AArch64CompressJumpTables-prevent-over-compression.patch + LoongArch-Assume-no-op-addrspacecasts-by-default.patch " builddir="$srcdir/$_pkgname-project-$pkgver.src" @@ -357,4 +358,5 @@ ed07e007536bd9be62098123bee69e19569084d8070a6582b2a55c951d394239c1d2e9d93238a1a4 92284100281c3384de1d5aa859feed418e5c94cdb9eeb4c8b3286095d0524023d50359648c2bbc547b2c2b8ce3629faed34472190d5d313e3ed746a05db2f73c 9003-LV-Add-test-where-pointer-is-incorrectly-marked-as-u.patch 2b5ee9088124f9cbea08943392027f525f981b788e60606067c0731caed08ae8f946eed5844f1b23c94a765ed1397951d3080c7a249dc9a8341d4eedbb60544b 9004-LV-Don-t-consider-pointer-as-uniform-if-it-is-also-s.patch 6881a8a49e12f2d168ffac188dbc8beca04756e28856591b71dd7e8695b633e54341d9b7b3c9858106b6917d80a3d4dae24442b323488b73edf2c301254fb52a 9011-AArch64CompressJumpTables-prevent-over-compression.patch +f84c89577225c8c9c7feefe7e0ee446834421c4e222069800bac425d21699393330f29b5567e4e8ef2ee9925b5de89b67fa31abddcf930f7abe03b9403cb6968 LoongArch-Assume-no-op-addrspacecasts-by-default.patch " diff --git a/main/llvm16/LoongArch-Assume-no-op-addrspacecasts-by-default.patch b/main/llvm16/LoongArch-Assume-no-op-addrspacecasts-by-default.patch new file mode 100644 index 000000000000..ee912eb1e104 --- /dev/null +++ b/main/llvm16/LoongArch-Assume-no-op-addrspacecasts-by-default.patch @@ -0,0 +1,84 @@ +From 525b1a631e3d858df1cf5e9e64dace666dc851bb Mon Sep 17 00:00:00 2001 +From: WANG Rui +Date: Tue, 20 Feb 2024 17:41:36 +0800 +Subject: [PATCH] [LoongArch] Assume no-op addrspacecasts by default + +Fixes #82330 +--- + .../Target/LoongArch/LoongArchTargetMachine.h | 5 ++ + llvm/test/CodeGen/LoongArch/addrspacecast.ll | 47 +++++++++++++++++++ + 2 files changed, 52 insertions(+) + create mode 100644 llvm/test/CodeGen/LoongArch/addrspacecast.ll + +diff --git a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h +index 7d39d47e86b3..fa9bc7608e7d 100644 +--- a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h ++++ b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.h +@@ -45,6 +45,11 @@ public: + MachineFunctionInfo * + createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, + const TargetSubtargetInfo *STI) const override; ++ ++ // Addrspacecasts are always noops. ++ bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override { ++ return true; ++ } + }; + + } // end namespace llvm +diff --git a/llvm/test/CodeGen/LoongArch/addrspacecast.ll b/llvm/test/CodeGen/LoongArch/addrspacecast.ll +new file mode 100644 +index 000000000000..2b90f32d0297 +--- /dev/null ++++ b/llvm/test/CodeGen/LoongArch/addrspacecast.ll +@@ -0,0 +1,47 @@ ++; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ++; RUN: llc -mtriple=loongarch32 -verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32 ++; RUN: llc -mtriple=loongarch64 -verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64 ++ ++define void @cast0(ptr addrspace(1) %ptr) { ++; LA32-LABEL: cast0: ++; LA32: # %bb.0: ++; LA32-NEXT: st.w $zero, $a0, 0 ++; LA32-NEXT: ret ++; ++; LA64-LABEL: cast0: ++; LA64: # %bb.0: ++; LA64-NEXT: st.w $zero, $a0, 0 ++; LA64-NEXT: ret ++ %ptr0 = addrspacecast ptr addrspace(1) %ptr to ptr addrspace(0) ++ store i32 0, ptr %ptr0 ++ ret void ++} ++ ++define void @cast1(ptr %ptr) { ++; LA32-LABEL: cast1: ++; LA32: # %bb.0: ++; LA32-NEXT: addi.w $sp, $sp, -16 ++; LA32-NEXT: .cfi_def_cfa_offset 16 ++; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill ++; LA32-NEXT: .cfi_offset 1, -4 ++; LA32-NEXT: bl %plt(foo) ++; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload ++; LA32-NEXT: addi.w $sp, $sp, 16 ++; LA32-NEXT: ret ++; ++; LA64-LABEL: cast1: ++; LA64: # %bb.0: ++; LA64-NEXT: addi.d $sp, $sp, -16 ++; LA64-NEXT: .cfi_def_cfa_offset 16 ++; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill ++; LA64-NEXT: .cfi_offset 1, -8 ++; LA64-NEXT: bl %plt(foo) ++; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload ++; LA64-NEXT: addi.d $sp, $sp, 16 ++; LA64-NEXT: ret ++ %castptr = addrspacecast ptr %ptr to ptr addrspace(10) ++ call void @foo(ptr addrspace(10) %castptr) ++ ret void ++} ++ ++declare void @foo(ptr addrspace(10)) +-- +2.27.0 +