Skip to content

Commit a19f05b

Browse files
authored
Revert "[PowerPC] Expand global named register support" (#113457)
Reverts #112603
1 parent 973fa98 commit a19f05b

File tree

9 files changed

+49
-187
lines changed

9 files changed

+49
-187
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17367,36 +17367,25 @@ SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
1736717367
return FrameAddr;
1736817368
}
1736917369

17370-
#define GET_REGISTER_MATCHER
17371-
#include "PPCGenAsmMatcher.inc"
17372-
17373-
Register PPCTargetLowering::getRegisterByName(const char *RegName, LLT VT,
17370+
// FIXME? Maybe this could be a TableGen attribute on some registers and
17371+
// this table could be generated automatically from RegInfo.
17372+
Register PPCTargetLowering::getRegisterByName(const char* RegName, LLT VT,
1737417373
const MachineFunction &MF) const {
17375-
bool IsPPC64 = Subtarget.isPPC64();
17374+
bool isPPC64 = Subtarget.isPPC64();
1737617375

17377-
bool Is64Bit = IsPPC64 && VT == LLT::scalar(64);
17378-
if (!Is64Bit && VT != LLT::scalar(32))
17376+
bool is64Bit = isPPC64 && VT == LLT::scalar(64);
17377+
if (!is64Bit && VT != LLT::scalar(32))
1737917378
report_fatal_error("Invalid register global variable type");
1738017379

17381-
Register Reg = MatchRegisterName(RegName);
17382-
if (!Reg)
17383-
report_fatal_error(
17384-
Twine("Invalid global name register \"" + StringRef(RegName) + "\"."));
17385-
17386-
// FIXME: These registers are not flagged as reserved and we can generate
17387-
// code for `-O0` but not for `-O2`. Need followup investigation as to why.
17388-
if ((IsPPC64 && Reg == PPC::R2) || Reg == PPC::R0)
17389-
report_fatal_error(Twine("Trying to reserve an invalid register \"" +
17390-
StringRef(RegName) + "\"."));
17391-
17392-
// Convert GPR to GP8R register for 64bit.
17393-
if (Is64Bit && StringRef(RegName).starts_with_insensitive("r"))
17394-
Reg = Reg.id() - PPC::R0 + PPC::X0;
17395-
17396-
if (Subtarget.getRegisterInfo()->getReservedRegs(MF).test(Reg))
17397-
report_fatal_error(Twine("Trying to obtain a reserved register \"" +
17398-
StringRef(RegName) + "\"."));
17399-
return Reg;
17380+
Register Reg = StringSwitch<Register>(RegName)
17381+
.Case("r1", is64Bit ? PPC::X1 : PPC::R1)
17382+
.Case("r2", isPPC64 ? Register() : PPC::R2)
17383+
.Case("r13", (is64Bit ? PPC::X13 : PPC::R13))
17384+
.Default(Register());
17385+
17386+
if (Reg)
17387+
return Reg;
17388+
report_fatal_error("Invalid register name global variable");
1740017389
}
1740117390

1740217391
bool PPCTargetLowering::isAccessedAsGotIndirect(SDValue GA) const {

llvm/test/CodeGen/PowerPC/named-reg-alloc-r0.ll

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
; RUN: not --crash llc -O0 < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
2-
; RUN: not --crash llc -O0 < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
1+
; RUN: not --crash llc < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
2+
; RUN: not --crash llc < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
3+
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
34

45
define i32 @get_reg() nounwind {
56
entry:
6-
; CHECK: Trying to reserve an invalid register "r0".
7+
; FIXME: Include an allocatable-specific error message
8+
; CHECK: Invalid register name global variable
79
%reg = call i32 @llvm.read_register.i32(metadata !0)
810
ret i32 %reg
911
}

llvm/test/CodeGen/PowerPC/named-reg-alloc-r1-64.ll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
1+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
22

33
define i64 @get_reg() nounwind {
4-
; CHECK: Trying to obtain a reserved register "r1".
54
entry:
65
%reg = call i64 @llvm.read_register.i64(metadata !0)
76
ret i64 %reg
7+
8+
; CHECK-LABEL: get_reg
9+
; CHECK: mr 3, 1
810
}
911

1012
declare i64 @llvm.read_register.i64(metadata) nounwind

llvm/test/CodeGen/PowerPC/named-reg-alloc-r1.ll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
; RUN: not --crash llc < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
2-
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
1+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
2+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
33

44
define i32 @get_reg() nounwind {
5-
; CHECK: Trying to obtain a reserved register "r1".
65
entry:
76
%reg = call i32 @llvm.read_register.i32(metadata !0)
87
ret i32 %reg
8+
9+
; CHECK-LABEL: @get_reg
10+
; CHECK: mr 3, 1
11+
912
}
1013

1114
declare i32 @llvm.read_register.i32(metadata) nounwind

llvm/test/CodeGen/PowerPC/named-reg-alloc-r13-64.ll

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
1+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
22

33
define i64 @get_reg() nounwind {
4-
; CHECK: Trying to obtain a reserved register "r13".
54
entry:
65
%reg = call i64 @llvm.read_register.i64(metadata !0)
76
ret i64 %reg
7+
8+
; CHECK-LABEL: @get_reg
9+
; CHECK: mr 3, 13
10+
811
}
912

1013
declare i64 @llvm.read_register.i64(metadata) nounwind

llvm/test/CodeGen/PowerPC/named-reg-alloc-r13.ll

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
; RUN: not --crash llc < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
2-
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
1+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
2+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
33

44
define i32 @get_reg() nounwind {
5-
; CHECK: Trying to obtain a reserved register "r13".
65
entry:
76
%reg = call i32 @llvm.read_register.i32(metadata !0)
87
ret i32 %reg
8+
9+
; CHECK-LABEL: @get_reg
10+
; CHECK: mr 3, 13
911
}
1012

1113
declare i32 @llvm.read_register.i32(metadata) nounwind

llvm/test/CodeGen/PowerPC/named-reg-alloc-r2-64.ll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
2+
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s
23

34
define i64 @get_reg() nounwind {
45
entry:
5-
; CHECK: Trying to reserve an invalid register "r2".
6+
; FIXME: Include an allocatable-specific error message
7+
; CHECK: Invalid register name global variable
68
%reg = call i64 @llvm.read_register.i64(metadata !0)
79
ret i64 %reg
810
}

llvm/test/CodeGen/PowerPC/named-reg-alloc-r2.ll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
; RUN: not --crash llc < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
1+
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu 2>&1 | FileCheck %s
22
; RUN: not --crash llc < %s -mtriple=powerpc64-unknown-linux-gnu 2>&1 | FileCheck %s --check-prefix=CHECK-NOTPPC32
33

44
define i32 @get_reg() nounwind {
55
entry:
6-
; CHECK-NOTPPC32: Trying to reserve an invalid register "r2".
7-
; CHECK: Trying to obtain a reserved register "r2".
6+
; FIXME: Include an allocatable-specific error message
7+
; CHECK-NOTPPC32: Invalid register name global variable
88
%reg = call i32 @llvm.read_register.i32(metadata !0)
99
ret i32 %reg
10+
11+
; CHECK-LABEL: @get_reg
12+
; CHECK: mr 3, 2
1013
}
1114

1215
declare i32 @llvm.read_register.i32(metadata) nounwind

llvm/test/CodeGen/PowerPC/named-reg-alloc.ll

Lines changed: 0 additions & 144 deletions
This file was deleted.

0 commit comments

Comments
 (0)