[llvm] b4b9f9b - [PowerPC] Emit dcbt and dcbtst in place of their extended mnemonics on AIX

Albion Fung via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 12 13:48:02 PDT 2021


Author: Albion Fung
Date: 2021-10-12T15:47:57-05:00
New Revision: b4b9f9b4b3cfaad369ad96dfbcdf43f73de4430b

URL: https://github.com/llvm/llvm-project/commit/b4b9f9b4b3cfaad369ad96dfbcdf43f73de4430b
DIFF: https://github.com/llvm/llvm-project/commit/b4b9f9b4b3cfaad369ad96dfbcdf43f73de4430b.diff

LOG: [PowerPC] Emit dcbt and dcbtst in place of their extended mnemonics on AIX

On AIX, the system assembler does not support the extended mnemonics
dcbtt and dcbtstt. This patch stops them from being emitted on
AIX and emits the base mnemonics instead, dcbt X, X, 16 and
dcbtstt X, X, 16 respectively.

Differential revision: https://reviews.llvm.org/D111258

Added: 
    

Modified: 
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
    llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-prefetch.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
index 3f6497aa0e8f4..5a8f192dd1aca 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
@@ -158,7 +158,10 @@ void PPCInstPrinter::printInst(const MCInst *MI, uint64_t Address,
   //    dcbt ra, rb, th [server]
   //    dcbt th, ra, rb [embedded]
   //  where th can be omitted when it is 0. dcbtst is the same.
-  if (MI->getOpcode() == PPC::DCBT || MI->getOpcode() == PPC::DCBTST) {
+  // On AIX, only emit the extended mnemonics for dcbt and dcbtst if
+  // the "modern assembler" is available.
+  if ((MI->getOpcode() == PPC::DCBT || MI->getOpcode() == PPC::DCBTST) &&
+      (!TT.isOSAIX() || STI.getFeatureBits()[PPC::FeatureModernAIXAs])) {
     unsigned char TH = MI->getOperand(0).getImm();
     O << "\tdcbt";
     if (MI->getOpcode() == PPC::DCBTST)

diff  --git a/llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-prefetch.ll b/llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-prefetch.ll
index 65ce64498a67e..2e8b285f77206 100644
--- a/llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-prefetch.ll
+++ b/llvm/test/CodeGen/PowerPC/builtins-ppc-xlcompat-prefetch.ll
@@ -26,14 +26,14 @@ define dso_local void @test_dcbtstt() {
 ; CHECK-AIX:       # %bb.0: # %entry
 ; CHECK-AIX-NEXT:    lwz 3, L..C0(2) # @vpa
 ; CHECK-AIX-NEXT:    lwz 3, 0(3)
-; CHECK-AIX-NEXT:    dcbtstt 0, 3
+; CHECK-AIX-NEXT:    dcbtst 0, 3, 16
 ; CHECK-AIX-NEXT:    blr
 ;
 ; CHECK-AIX64-LABEL: test_dcbtstt:
 ; CHECK-AIX64:       # %bb.0: # %entry
 ; CHECK-AIX64-NEXT:    ld 3, L..C0(2) # @vpa
 ; CHECK-AIX64-NEXT:    ld 3, 0(3)
-; CHECK-AIX64-NEXT:    dcbtstt 0, 3
+; CHECK-AIX64-NEXT:    dcbtst 0, 3, 16
 ; CHECK-AIX64-NEXT:    blr
 entry:
   %0 = load i8*, i8** @vpa, align 8
@@ -55,14 +55,14 @@ define dso_local void @test_dcbtt() {
 ; CHECK-AIX:       # %bb.0: # %entry
 ; CHECK-AIX-NEXT:    lwz 3, L..C0(2) # @vpa
 ; CHECK-AIX-NEXT:    lwz 3, 0(3)
-; CHECK-AIX-NEXT:    dcbtt 0, 3
+; CHECK-AIX-NEXT:    dcbt 0, 3, 16
 ; CHECK-AIX-NEXT:    blr
 ;
 ; CHECK-AIX64-LABEL: test_dcbtt:
 ; CHECK-AIX64:       # %bb.0: # %entry
 ; CHECK-AIX64-NEXT:    ld 3, L..C0(2) # @vpa
 ; CHECK-AIX64-NEXT:    ld 3, 0(3)
-; CHECK-AIX64-NEXT:    dcbtt 0, 3
+; CHECK-AIX64-NEXT:    dcbt 0, 3, 16
 ; CHECK-AIX64-NEXT:    blr
 entry:
   %0 = load i8*, i8** @vpa, align 8


        


More information about the llvm-commits mailing list