Skip to content

Commit dd3e0a4

Browse files
authored
[LoongArch] Assume no-op addrspacecasts by default (llvm#82332)
This PR indicates that `addrspacecasts` are always no-ops on LoongArch. Fixes llvm#82330
1 parent 6e20cb5 commit dd3e0a4

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

llvm/lib/Target/LoongArch/LoongArchTargetMachine.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class LoongArchTargetMachine : public LLVMTargetMachine {
4545
MachineFunctionInfo *
4646
createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,
4747
const TargetSubtargetInfo *STI) const override;
48+
49+
// Addrspacecasts are always noops.
50+
bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override {
51+
return true;
52+
}
4853
};
4954

5055
} // end namespace llvm
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc --mtriple=loongarch32 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32
3+
; RUN: llc --mtriple=loongarch64 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64
4+
5+
define void @cast0(ptr addrspace(1) %ptr) {
6+
; LA32-LABEL: cast0:
7+
; LA32: # %bb.0:
8+
; LA32-NEXT: st.w $zero, $a0, 0
9+
; LA32-NEXT: ret
10+
;
11+
; LA64-LABEL: cast0:
12+
; LA64: # %bb.0:
13+
; LA64-NEXT: st.w $zero, $a0, 0
14+
; LA64-NEXT: ret
15+
%ptr0 = addrspacecast ptr addrspace(1) %ptr to ptr addrspace(0)
16+
store i32 0, ptr %ptr0
17+
ret void
18+
}
19+
20+
define void @cast1(ptr %ptr) {
21+
; LA32-LABEL: cast1:
22+
; LA32: # %bb.0:
23+
; LA32-NEXT: addi.w $sp, $sp, -16
24+
; LA32-NEXT: .cfi_def_cfa_offset 16
25+
; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
26+
; LA32-NEXT: .cfi_offset 1, -4
27+
; LA32-NEXT: bl %plt(foo)
28+
; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
29+
; LA32-NEXT: addi.w $sp, $sp, 16
30+
; LA32-NEXT: ret
31+
;
32+
; LA64-LABEL: cast1:
33+
; LA64: # %bb.0:
34+
; LA64-NEXT: addi.d $sp, $sp, -16
35+
; LA64-NEXT: .cfi_def_cfa_offset 16
36+
; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
37+
; LA64-NEXT: .cfi_offset 1, -8
38+
; LA64-NEXT: bl %plt(foo)
39+
; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
40+
; LA64-NEXT: addi.d $sp, $sp, 16
41+
; LA64-NEXT: ret
42+
%castptr = addrspacecast ptr %ptr to ptr addrspace(10)
43+
call void @foo(ptr addrspace(10) %castptr)
44+
ret void
45+
}
46+
47+
declare void @foo(ptr addrspace(10))

0 commit comments

Comments
 (0)