diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp @@ -81,12 +81,11 @@ // Set some default feature to MC layer. std::string FullFS = std::string(FS); - // modern-aix-as feature should be default for all non-AIX. - if (!TT.isOSAIX()) { + if (TT.isOSAIX()) { if (!FullFS.empty()) - FullFS = "+modern-aix-as," + FullFS; + FullFS = "+aix," + FullFS; else - FullFS = "+modern-aix-as"; + FullFS = "+aix"; } return createPPCMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FullFS); diff --git a/llvm/lib/Target/PowerPC/PPC.td b/llvm/lib/Target/PowerPC/PPC.td --- a/llvm/lib/Target/PowerPC/PPC.td +++ b/llvm/lib/Target/PowerPC/PPC.td @@ -57,6 +57,7 @@ def Feature64Bit : SubtargetFeature<"64bit","Has64BitSupport", "true", "Enable 64-bit instructions">; +def AIXOS: SubtargetFeature<"aix", "IsAIX", "true", "AIX OS">; def FeatureModernAIXAs : SubtargetFeature<"modern-aix-as", "HasModernAIXAs", "true", "AIX system assembler is modern enough to support new mnes">; diff --git a/llvm/lib/Target/PowerPC/PPCInstr64Bit.td b/llvm/lib/Target/PowerPC/PPCInstr64Bit.td --- a/llvm/lib/Target/PowerPC/PPCInstr64Bit.td +++ b/llvm/lib/Target/PowerPC/PPCInstr64Bit.td @@ -988,7 +988,7 @@ def : InstAlias<"mfxer $Rx", (MFSPR8 g8rc:$Rx, 1)>; //Disable this alias on AIX for now because as does not support them. -let Predicates = [ModernAIXAs] in { +let Predicates = [ModernAs] in { def : InstAlias<"mtudscr $Rx", (MTSPR8 3, g8rc:$Rx)>; def : InstAlias<"mfudscr $Rx", (MFSPR8 g8rc:$Rx, 3)>; } diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.td @@ -1121,7 +1121,8 @@ def IsNotISA3_1 : Predicate<"!Subtarget->isISA3_1()">; // AIX assembler may not be modern enough to support some extended mne. -def ModernAIXAs: Predicate<"Subtarget->HasModernAIXAs">, AssemblerPredicate<(all_of FeatureModernAIXAs)>; +def ModernAs: Predicate<"!Subtarget->isAIXABI() || Subtarget->HasModernAIXAs">, + AssemblerPredicate<(any_of (not AIXOS), FeatureModernAIXAs)>; //===----------------------------------------------------------------------===// // PowerPC Multiclass Definitions. @@ -4653,7 +4654,7 @@ def : InstAlias<"mfxer $Rx", (MFSPR gprc:$Rx, 1)>; //Disable this alias on AIX for now because as does not support them. -let Predicates = [ModernAIXAs] in { +let Predicates = [ModernAs] in { def : InstAlias<"mtudscr $Rx", (MTSPR 3, gprc:$Rx)>; def : InstAlias<"mfudscr $Rx", (MFSPR gprc:$Rx, 3)>; } diff --git a/llvm/lib/Target/PowerPC/PPCSubtarget.h b/llvm/lib/Target/PowerPC/PPCSubtarget.h --- a/llvm/lib/Target/PowerPC/PPCSubtarget.h +++ b/llvm/lib/Target/PowerPC/PPCSubtarget.h @@ -154,6 +154,7 @@ bool PairedVectorMemops; bool PredictableSelectIsExpensive; bool HasModernAIXAs; + bool IsAIX; POPCNTDKind HasPOPCNTD; diff --git a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp --- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp +++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp @@ -134,6 +134,7 @@ PairedVectorMemops = false; PredictableSelectIsExpensive = false; HasModernAIXAs = false; + IsAIX = false; HasPOPCNTD = POPCNTD_Unavailable; } diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -190,12 +190,11 @@ FullFS = "+invariant-function-descriptors"; } - // modern-aix-as feature should be default for all non-AIXs. - if (!TT.isOSAIX()) { + if (TT.isOSAIX()) { if (!FullFS.empty()) - FullFS = "+modern-aix-as," + FullFS; + FullFS = "+aix," + FullFS; else - FullFS = "+modern-aix-as"; + FullFS = "+aix"; } return FullFS; diff --git a/llvm/test/MC/PowerPC/modern-aix-as.s b/llvm/test/MC/PowerPC/modern-aix-as.s --- a/llvm/test/MC/PowerPC/modern-aix-as.s +++ b/llvm/test/MC/PowerPC/modern-aix-as.s @@ -1,6 +1,10 @@ # RUN: llvm-mc -triple powerpc64-unknown-unknown -mattr=+modern-aix-as --show-encoding %s | FileCheck -check-prefix=CHECK-BE %s # RUN: llvm-mc -triple powerpc64le-unknown-unknown -mattr=+modern-aix-as --show-encoding %s | FileCheck -check-prefix=CHECK-LE %s -# RUN: not llvm-mc -triple powerpc64le-unknown-unknown -mattr=-modern-aix-as --show-encoding %s 2>&1 | FileCheck -check-prefix=CHECK-OLD %s +# RUN: llvm-mc -triple powerpc64le-unknown-unknown -mattr=-modern-aix-as --show-encoding %s | FileCheck -check-prefix=CHECK-LE %s +# RUN: not llvm-mc -triple powerpc64le-unknown-unknown -mattr=+aix --show-encoding %s 2>&1 | FileCheck -check-prefix=CHECK-OLD %s +##TODO: Replace above with following when implement createXCOFFAsmParser +# UN: llvm-mc -triple powerpc-aix-ibm-xcoff -mattr=+modern-aix-as --show-encoding %s 2>&1 | FileCheck -check-prefix=CHECK-BE %s +# UN: not llvm-mc -triple powerpc-aix-ibm-xcoff --show-encoding %s 2>&1 | FileCheck -check-prefix=CHECK-OLD %s # CHECK-BE: mtudscr 2 # encoding: [0x7c,0x43,0x03,0xa6] # CHECK-LE: mtudscr 2 # encoding: [0xa6,0x03,0x43,0x7c]