[llvm] r272673 - [AMDGPU][llvm-mc] Predefined symbols to access -mcpu from the assembly source (.option.machine_version...)

Artem Tamazov via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 14 08:03:59 PDT 2016


Author: artem.tamazov
Date: Tue Jun 14 10:03:59 2016
New Revision: 272673

URL: http://llvm.org/viewvc/llvm-project?rev=272673&view=rev
Log:
[AMDGPU][llvm-mc] Predefined symbols to access -mcpu from the assembly source (.option.machine_version...)

The feature allows for conditional assembly etc.
TODO: make those symbols read-only.
Test added.

Differential Revision: http://reviews.llvm.org/D21238

Added:
    llvm/trunk/test/MC/AMDGPU/symbol_special.s
Modified:
    llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp

Modified: llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp?rev=272673&r1=272672&r2=272673&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp Tue Jun 14 10:03:59 2016
@@ -60,8 +60,6 @@ class AMDGPUOperand : public MCParsedAsm
 public:
   AMDGPUOperand(enum KindTy K) : MCParsedAsmOperand(), Kind(K) {}
 
-  MCContext *Ctx;
-
   typedef std::unique_ptr<AMDGPUOperand> Ptr;
 
   struct Modifiers {
@@ -586,6 +584,21 @@ public:
     }
 
     setAvailableFeatures(ComputeAvailableFeatures(getSTI().getFeatureBits()));
+
+    {
+      // TODO: make those pre-defined variables read-only.
+      // Currently there is none suitable machinery in the core llvm-mc for this.
+      // MCSymbol::isRedefinable is intended for another purpose, and
+      // AsmParser::parseDirectiveSet() cannot be specialized for specific target.
+      AMDGPU::IsaVersion Isa = AMDGPU::getIsaVersion(getSTI().getFeatureBits());
+      MCContext &Ctx = getContext();
+      MCSymbol *Sym = Ctx.getOrCreateSymbol(Twine(".option.machine_version_major"));
+      Sym->setVariableValue(MCConstantExpr::create(Isa.Major, Ctx));
+      Sym = Ctx.getOrCreateSymbol(Twine(".option.machine_version_minor"));
+      Sym->setVariableValue(MCConstantExpr::create(Isa.Minor, Ctx));
+      Sym = Ctx.getOrCreateSymbol(Twine(".option.machine_version_stepping"));
+      Sym->setVariableValue(MCConstantExpr::create(Isa.Stepping, Ctx));
+    }
   }
 
   AMDGPUTargetStreamer &getTargetStreamer() {

Added: llvm/trunk/test/MC/AMDGPU/symbol_special.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AMDGPU/symbol_special.s?rev=272673&view=auto
==============================================================================
--- llvm/trunk/test/MC/AMDGPU/symbol_special.s (added)
+++ llvm/trunk/test/MC/AMDGPU/symbol_special.s Tue Jun 14 10:03:59 2016
@@ -0,0 +1,48 @@
+// RUN: llvm-mc -arch=amdgcn -mcpu=bonaire %s | FileCheck %s --check-prefix=BONAIRE
+// RUN: llvm-mc -arch=amdgcn -mcpu=hawaii %s | FileCheck %s --check-prefix=HAWAII
+// RUN: llvm-mc -arch=amdgcn -mcpu=tonga %s | FileCheck %s --check-prefix=TONGA
+// RUN: llvm-mc -arch=amdgcn -mcpu=fiji %s | FileCheck %s --check-prefix=FIJI
+
+.if .option.machine_version_major == 0
+.byte 0
+.elseif .option.machine_version_major == 7
+.byte 7
+.elseif .option.machine_version_major == 8
+.byte 8
+.else
+.error "major unknown"
+.endif
+// BONAIRE: .byte 7
+// HAWAII: .byte 7
+// TONGA: .byte 8
+// FIJI: .byte 8
+
+.if .option.machine_version_minor == 0
+.byte 0
+.else
+.error "minor unknown"
+.endif
+// BONAIRE: .byte 0
+// HAWAII: .byte 0
+// TONGA: .byte 0
+// FIJI: .byte 0
+
+.if .option.machine_version_stepping == 0
+.byte 0
+.elseif .option.machine_version_stepping == 1
+.byte 1
+.elseif .option.machine_version_stepping == 3
+.byte 3
+.else
+.error "stepping unknown"
+.endif
+// BONAIRE: .byte 0
+// HAWAII: .byte 1
+// TONGA: .byte 0
+// FIJI: .byte 3
+
+v_add_f32 v0, v0, v[.option.machine_version_major]
+// BONAIRE: v_add_f32_e32 v0, v0, v7
+// HAWAII: v_add_f32_e32 v0, v0, v7
+// TONGA: v_add_f32_e32 v0, v0, v8
+// FIJI: v_add_f32_e32 v0, v0, v8




More information about the llvm-commits mailing list