[PATCH] AsmPrinter: introduce support for aliases with non-zero GEPs.
Peter Collingbourne
peter at pcc.me.uk
Mon Apr 22 00:47:35 PDT 2013
http://llvm-reviews.chandlerc.com/D701
Files:
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
test/CodeGen/X86/aliases.ll
Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -841,6 +841,8 @@
// FIXME: Produce a DW_OP_bit_piece if we used a superregister
}
+static const MCExpr *lowerConstant(const Constant *CV, AsmPrinter &AP);
+
bool AsmPrinter::doFinalization(Module &M) {
// Emit global variables.
for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
@@ -908,9 +910,6 @@
I != E; ++I) {
MCSymbol *Name = Mang->getSymbol(I);
- const GlobalValue *GV = I->getAliasedGlobal();
- MCSymbol *Target = Mang->getSymbol(GV);
-
if (I->hasExternalLinkage() || !MAI->getWeakRefDirective())
OutStreamer.EmitSymbolAttribute(Name, MCSA_Global);
else if (I->hasWeakLinkage())
@@ -921,8 +920,7 @@
EmitVisibility(Name, I->getVisibility());
// Emit the directives as assignments aka .set:
- OutStreamer.EmitAssignment(Name,
- MCSymbolRefExpr::Create(Target, OutContext));
+ OutStreamer.EmitAssignment(Name, lowerConstant(I->getAliasee(), *this));
}
}
Index: test/CodeGen/X86/aliases.ll
===================================================================
--- test/CodeGen/X86/aliases.ll
+++ test/CodeGen/X86/aliases.ll
@@ -1,26 +1,42 @@
-; RUN: llc < %s -mtriple=i686-pc-linux-gnu -asm-verbose=false -o %t
-; RUN: grep globl %t | count 6
-; RUN: grep weak %t | count 1
-; RUN: grep hidden %t | count 1
-; RUN: grep protected %t | count 1
+; RUN: llc < %s -mtriple=i686-pc-linux-gnu -asm-verbose=false -o - | FileCheck %s
@bar = external global i32
+; CHECK: .globl foo1
+; CHECK: foo1 = bar
@foo1 = alias i32* @bar
+; CHECK: .globl foo2
+; CHECK: foo2 = bar
@foo2 = alias i32* @bar
%FunTy = type i32()
declare i32 @foo_f()
+; CHECK: .weak bar_f
+; CHECK: bar_f = foo_f
@bar_f = alias weak %FunTy* @foo_f
+; CHECK-NOT: .{{.*}}bar_i
+; CHECK: bar_i = bar
@bar_i = alias internal i32* @bar
+; CHECK: .globl A
+; CHECK: A = bar
@A = alias bitcast (i32* @bar to i64*)
+; CHECK: .globl bar_h
+; CHECK: .hidden bar_h
+; CHECK: bar_h = bar
@bar_h = hidden alias i32* @bar
+; CHECK: .globl bar_p
+; CHECK: .protected bar_p
+; CHECK: bar_p = bar
@bar_p = protected alias i32* @bar
+; CHECK: .globl bar_offset
+; CHECK: bar_offset = bar+4
+ at bar_offset = alias getelementptr (i32* @bar, i32 1)
+
define i32 @test() {
entry:
%tmp = load i32* @foo1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D701.1.patch
Type: text/x-patch
Size: 2533 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130422/202ed681/attachment.bin>
More information about the llvm-commits
mailing list