Skip to content

Commit a6f7278

Browse files
[RISCV][GISEL] legalize, regbankselect, and instruction-select G_PTRMASK (#73062)
This is done in instruction-select instead of in legalization for the sake of alias analysis.
1 parent dbb9043 commit a6f7278

File tree

8 files changed

+194
-1
lines changed

8 files changed

+194
-1
lines changed

llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,13 @@ void RISCVInstructionSelector::preISelLower(MachineInstr &MI,
701701
MRI.setType(DstReg, sXLen);
702702
break;
703703
}
704+
case TargetOpcode::G_PTRMASK: {
705+
Register DstReg = MI.getOperand(0).getReg();
706+
const LLT sXLen = LLT::scalar(STI.getXLen());
707+
replacePtrWithInt(MI.getOperand(1), MIB, MRI);
708+
MI.setDesc(TII.get(TargetOpcode::G_AND));
709+
MRI.setType(DstReg, sXLen);
710+
}
704711
}
705712
}
706713

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
174174
LoadStoreActions.clampScalar(0, s32, sXLen).lower();
175175
ExtLoadActions.widenScalarToNextPow2(0).clampScalar(0, s32, sXLen).lower();
176176

177-
getActionDefinitionsBuilder(G_PTR_ADD).legalFor({{p0, sXLen}});
177+
getActionDefinitionsBuilder({G_PTR_ADD, G_PTRMASK}).legalFor({{p0, sXLen}});
178178

179179
getActionDefinitionsBuilder(G_PTRTOINT)
180180
.legalFor({{sXLen, p0}})
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_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: ptrmask_p0_s32
6+
legalized: true
7+
regBankSelected: true
8+
tracksRegLiveness: true
9+
body: |
10+
bb.0:
11+
liveins: $x10, $x11
12+
; CHECK-LABEL: name: ptrmask_p0_s32
13+
; CHECK: liveins: $x10, $x11
14+
; CHECK-NEXT: {{ $}}
15+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
16+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
17+
; CHECK-NEXT: [[AND:%[0-9]+]]:gpr = AND [[COPY]], [[COPY1]]
18+
; CHECK-NEXT: $x10 = COPY [[AND]]
19+
; CHECK-NEXT: PseudoRET implicit $x10
20+
%0:gprb(p0) = COPY $x10
21+
%1:gprb(s32) = COPY $x11
22+
%2:gprb(p0) = G_PTRMASK %0(p0), %1(s32)
23+
$x10 = COPY %2(p0)
24+
PseudoRET implicit $x10
25+
...
26+
27+
---
28+
name: ptrmask_p0_const_s32
29+
legalized: true
30+
regBankSelected: true
31+
tracksRegLiveness: true
32+
body: |
33+
bb.0:
34+
liveins: $x10
35+
; CHECK-LABEL: name: ptrmask_p0_const_s32
36+
; CHECK: liveins: $x10
37+
; CHECK-NEXT: {{ $}}
38+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
39+
; CHECK-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 10
40+
; CHECK-NEXT: $x10 = COPY [[ANDI]]
41+
; CHECK-NEXT: PseudoRET implicit $x10
42+
%0:gprb(p0) = COPY $x10
43+
%1:gprb(s32) = G_CONSTANT i32 10
44+
%2:gprb(p0) = G_PTRMASK %0(p0), %1(s32)
45+
$x10 = COPY %2(p0)
46+
PseudoRET implicit $x10
47+
...
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_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: ptrmask_p0_s64
6+
legalized: true
7+
regBankSelected: true
8+
tracksRegLiveness: true
9+
body: |
10+
bb.0:
11+
liveins: $x10, $x11
12+
; CHECK-LABEL: name: ptrmask_p0_s64
13+
; CHECK: liveins: $x10, $x11
14+
; CHECK-NEXT: {{ $}}
15+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
16+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
17+
; CHECK-NEXT: [[AND:%[0-9]+]]:gpr = AND [[COPY]], [[COPY1]]
18+
; CHECK-NEXT: $x10 = COPY [[AND]]
19+
; CHECK-NEXT: PseudoRET implicit $x10
20+
%0:gprb(p0) = COPY $x10
21+
%1:gprb(s64) = COPY $x11
22+
%2:gprb(p0) = G_PTRMASK %0(p0), %1(s64)
23+
$x10 = COPY %2(p0)
24+
PseudoRET implicit $x10
25+
...
26+
27+
---
28+
name: ptrmask_p0_const_s64
29+
legalized: true
30+
regBankSelected: true
31+
tracksRegLiveness: true
32+
body: |
33+
bb.0:
34+
liveins: $x10
35+
; CHECK-LABEL: name: ptrmask_p0_const_s64
36+
; CHECK: liveins: $x10
37+
; CHECK-NEXT: {{ $}}
38+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
39+
; CHECK-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 10
40+
; CHECK-NEXT: $x10 = COPY [[ANDI]]
41+
; CHECK-NEXT: PseudoRET implicit $x10
42+
%0:gprb(p0) = COPY $x10
43+
%1:gprb(s64) = G_CONSTANT i64 10
44+
%2:gprb(p0) = G_PTRMASK %0(p0), %1(s64)
45+
$x10 = COPY %2(p0)
46+
PseudoRET implicit $x10
47+
...
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: ptrmask_p0_s32
6+
body: |
7+
bb.0:
8+
liveins: $x10, $x11
9+
; CHECK-LABEL: name: ptrmask_p0_s32
10+
; CHECK: liveins: $x10, $x11
11+
; CHECK-NEXT: {{ $}}
12+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
13+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
14+
; CHECK-NEXT: [[PTRMASK:%[0-9]+]]:_(p0) = G_PTRMASK [[COPY]], [[COPY1]](s32)
15+
; CHECK-NEXT: $x10 = COPY [[PTRMASK]](p0)
16+
; CHECK-NEXT: PseudoRET implicit $x10
17+
%0:_(p0) = COPY $x10
18+
%1:_(s32) = COPY $x11
19+
%2:_(p0) = G_PTRMASK %0(p0), %1(s32)
20+
$x10 = COPY %2(p0)
21+
PseudoRET implicit $x10
22+
...
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv64 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: ptrmask_p0_s64
6+
body: |
7+
bb.0:
8+
liveins: $x10, $x11
9+
; CHECK-LABEL: name: ptrmask_p0_s64
10+
; CHECK: liveins: $x10, $x11
11+
; CHECK-NEXT: {{ $}}
12+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
13+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11
14+
; CHECK-NEXT: [[PTRMASK:%[0-9]+]]:_(p0) = G_PTRMASK [[COPY]], [[COPY1]](s64)
15+
; CHECK-NEXT: $x10 = COPY [[PTRMASK]](p0)
16+
; CHECK-NEXT: PseudoRET implicit $x10
17+
%0:_(p0) = COPY $x10
18+
%1:_(s64) = COPY $x11
19+
%2:_(p0) = G_PTRMASK %0(p0), %1(s64)
20+
$x10 = COPY %2(p0)
21+
PseudoRET implicit $x10
22+
...
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: ptrmask_p0_s32
6+
legalized: true
7+
tracksRegLiveness: true
8+
body: |
9+
bb.0:
10+
liveins: $x10, $x11
11+
; CHECK-LABEL: name: ptrmask_p0_s32
12+
; CHECK: liveins: $x10, $x11
13+
; CHECK-NEXT: {{ $}}
14+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
15+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $x11
16+
; CHECK-NEXT: [[PTRMASK:%[0-9]+]]:gprb(p0) = G_PTRMASK [[COPY]], [[COPY1]](s32)
17+
; CHECK-NEXT: $x10 = COPY [[PTRMASK]](p0)
18+
; CHECK-NEXT: PseudoRET implicit $x10
19+
%0:_(p0) = COPY $x10
20+
%1:_(s32) = COPY $x11
21+
%2:_(p0) = G_PTRMASK %0(p0), %1(s32)
22+
$x10 = COPY %2(p0)
23+
PseudoRET implicit $x10
24+
...
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv64 -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: ptrmask_p0_s64
6+
legalized: true
7+
tracksRegLiveness: true
8+
body: |
9+
bb.0:
10+
liveins: $x10, $x11
11+
; CHECK-LABEL: name: ptrmask_p0_s64
12+
; CHECK: liveins: $x10, $x11
13+
; CHECK-NEXT: {{ $}}
14+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10
15+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11
16+
; CHECK-NEXT: [[PTRMASK:%[0-9]+]]:gprb(p0) = G_PTRMASK [[COPY]], [[COPY1]](s64)
17+
; CHECK-NEXT: $x10 = COPY [[PTRMASK]](p0)
18+
; CHECK-NEXT: PseudoRET implicit $x10
19+
%0:_(p0) = COPY $x10
20+
%1:_(s64) = COPY $x11
21+
%2:_(p0) = G_PTRMASK %0(p0), %1(s64)
22+
$x10 = COPY %2(p0)
23+
PseudoRET implicit $x10
24+
...

0 commit comments

Comments
 (0)