diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -7371,6 +7371,7 @@ Flags = PPCII::MO_TOC_LO; break; case PPC::ADDItoc: + case PPC::ADDItoc8: break; } @@ -7466,8 +7467,12 @@ } } + auto opcodeIsAIXTocData = [](unsigned Opcode) { + return Opcode == PPC::ADDItoc || Opcode == PPC::ADDItoc8; + }; + if (FirstOp == 1) // Store - if (Base.getMachineOpcode() == PPC::ADDItoc) + if (opcodeIsAIXTocData(Base.getMachineOpcode())) (void)CurDAG->UpdateNodeOperands(N, N->getOperand(0), Base.getOperand(0), Base.getOperand(1), N->getOperand(3)); @@ -7475,7 +7480,7 @@ (void)CurDAG->UpdateNodeOperands(N, N->getOperand(0), ImmOpnd, Base.getOperand(0), N->getOperand(3)); else // Load - if (Base.getMachineOpcode() == PPC::ADDItoc) + if (opcodeIsAIXTocData(Base.getMachineOpcode())) (void)CurDAG->UpdateNodeOperands(N, Base.getOperand(0), Base.getOperand(1), N->getOperand(2)); else diff --git a/llvm/test/CodeGen/PowerPC/toc-data-const.ll b/llvm/test/CodeGen/PowerPC/toc-data-const.ll --- a/llvm/test/CodeGen/PowerPC/toc-data-const.ll +++ b/llvm/test/CodeGen/PowerPC/toc-data-const.ll @@ -2,7 +2,7 @@ ; RUN: llc -O0 -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s --check-prefixes=CHECK,NOOPT ; RUN llc -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s --check-prefix=CHECK,OPT -; RUN: llc -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s --check-prefixes=CHECK,NOOPT +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s --check-prefixes=CHECK,OPT @i1 = external constant i32 #0 @i2 = constant i32* @i1 #0 diff --git a/llvm/test/CodeGen/PowerPC/toc-data.ll b/llvm/test/CodeGen/PowerPC/toc-data.ll --- a/llvm/test/CodeGen/PowerPC/toc-data.ll +++ b/llvm/test/CodeGen/PowerPC/toc-data.ll @@ -3,14 +3,14 @@ ; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s \ ; RUN: -stop-before=ppc-vsx-copy | FileCheck %s --check-prefix CHECK64 ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefixes=TEST32,ASMOPT32 -; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix TEST64 +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefixes=TEST64,ASMOPT64 ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s \ ; RUN: -stop-before=ppc-vsx-copy -O0 | FileCheck %s --check-prefixes=CHECK32,NOOPT32 ; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s \ ; RUN: -stop-before=ppc-vsx-copy -O0 | FileCheck %s --check-prefix CHECK64-NOOPT ; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs -O0 < %s | FileCheck %s --check-prefixes=TEST32,ASMNOOPT32 -; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs -O0 < %s | FileCheck %s --check-prefix TEST64 +; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs -O0 < %s | FileCheck %s --check-prefixes=TEST64,ASMNOOPT64 @i = dso_local global i32 0, align 4 #0 @d = dso_local local_unnamed_addr global double 3.141590e+00, align 8 @@ -34,17 +34,17 @@ ; ASMOPT32: stw 3, i[TD](2) ; CHECK64: name: write_int -; CHECK64: %[[SCRATCH:[0-9]+]]:g8rc_and_g8rc_nox0 = ADDItoc8 @i, $x2 -; CHECK64-NEXT: STW8 %{{[0-9]+}}, 0, killed %[[SCRATCH]] :: (store (s32) into @i) +; CHECK64: STW8 %{{[0-9]+}}, @i, $x2 :: (store (s32) into @i) ; CHECK64-NOOPT: name: write_int ; CHECK64-NOOPT: %[[SUBREG:[0-9]+]]:gprc = COPY %{{[0-9]}}.sub_32 ; CHECK64-NOOPT: %[[ADDR:[0-9]+]]:g8rc_and_g8rc_nox0 = ADDItoc8 @i, $x2 :: (load (s64) from got) ; CHECK64-NOOPT: STW %[[SUBREG]], 0, killed %[[ADDR]] :: (store (s32) into @i) -; TEST64: .write_int: -; TEST64: la 4, i[TD](2) -; TEST64-NEXT: stw 3, 0(4) +; TEST64: .write_int: +; ASMNOOPT64: la 4, i[TD](2) +; ASMNOOPT64-NEXT: stw 3, 0(4) +; ASMOPT64: stw 3, i[TD](2) define dso_local i64 @read_ll() { @@ -89,17 +89,17 @@ ; ASMOPT32: lfs 1, f[TD](2) ; CHECK64: name: read_float -; CHECK64: %[[SCRATCH:[0-9]+]]:g8rc_and_g8rc_nox0 = ADDItoc8 @f, $x2 -; CHECK64: %{{[0-9]+}}:f4rc = LFS 0, killed %[[SCRATCH]] :: (dereferenceable load (s32) from @f) +; CHECK64: %{{[0-9]+}}:f4rc = LFS @f, $x2 :: (dereferenceable load (s32) from @f) + ; CHECK64-NOOPT: name: read_float ; CHECK64-NOOPT: %[[SCRATCH:[0-9]+]]:g8rc_and_g8rc_nox0 = ADDItoc8 @f, $x2 ; CHECK64-NOOPT: %{{[0-9]+}}:f4rc = LFS 0, killed %[[SCRATCH]] ; TEST64: .read_float: -; TEST64: la 3, f[TD](2) -; TEST64-NEXT: lfs 1, 0(3) - +; ASMNOOPT64: la 3, f[TD](2) +; ASMNOOPT64-NEXT: lfs 1, 0(3) +; ASMOPT64: lfs 1, f[TD](2) define dso_local void @write_double(double %in) { entry: