[llvm] r283117 - Don't drop the llvm. prefix when renaming.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 3 08:51:42 PDT 2016
Author: rafael
Date: Mon Oct 3 10:51:42 2016
New Revision: 283117
URL: http://llvm.org/viewvc/llvm-project?rev=283117&view=rev
Log:
Don't drop the llvm. prefix when renaming.
If the llvm. prefix is dropped other parts of llvm don't see this as
an intrinsic. This means that the number of regular symbols depends
on the context the module is loaded into, which causes LTO to abort.
Fixes PR30509.
Added:
llvm/trunk/test/LTO/Resolution/X86/Inputs/intrinsic.ll
llvm/trunk/test/LTO/Resolution/X86/intrinsic.ll
Modified:
llvm/trunk/lib/IR/AutoUpgrade.cpp
Modified: llvm/trunk/lib/IR/AutoUpgrade.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AutoUpgrade.cpp?rev=283117&r1=283116&r2=283117&view=diff
==============================================================================
--- llvm/trunk/lib/IR/AutoUpgrade.cpp (original)
+++ llvm/trunk/lib/IR/AutoUpgrade.cpp Mon Oct 3 10:51:42 2016
@@ -31,6 +31,8 @@
#include <cstring>
using namespace llvm;
+static void rename(GlobalValue *GV) { GV->setName(GV->getName() + ".old"); }
+
// Upgrade the declarations of the SSE4.1 functions whose arguments have
// changed their type from v4f32 to v2i64.
static bool UpgradeSSE41Function(Function* F, Intrinsic::ID IID,
@@ -42,7 +44,7 @@ static bool UpgradeSSE41Function(Functio
return false;
// Yes, it's old, replace it with new version.
- F->setName(F->getName() + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(), IID);
return true;
}
@@ -58,7 +60,7 @@ static bool UpgradeX86IntrinsicsWith8Bit
return false;
// Move this function aside and map down.
- F->setName(F->getName() + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(), IID);
return true;
}
@@ -135,13 +137,13 @@ static bool UpgradeIntrinsicFunction1(Fu
case 'c': {
if (Name.startswith("ctlz.") && F->arg_size() == 1) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::ctlz,
F->arg_begin()->getType());
return true;
}
if (Name.startswith("cttz.") && F->arg_size() == 1) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::cttz,
F->arg_begin()->getType());
return true;
@@ -154,7 +156,7 @@ static bool UpgradeIntrinsicFunction1(Fu
Type* ObjectPtr[1] = {Args[1]};
if (F->getName() !=
Intrinsic::getName(Intrinsic::invariant_start, ObjectPtr)) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(
F->getParent(), Intrinsic::invariant_start, ObjectPtr);
return true;
@@ -165,7 +167,7 @@ static bool UpgradeIntrinsicFunction1(Fu
Type* ObjectPtr[1] = {Args[2]};
if (F->getName() !=
Intrinsic::getName(Intrinsic::invariant_end, ObjectPtr)) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(),
Intrinsic::invariant_end, ObjectPtr);
return true;
@@ -177,7 +179,7 @@ static bool UpgradeIntrinsicFunction1(Fu
if (Name.startswith("masked.load.")) {
Type *Tys[] = { F->getReturnType(), F->arg_begin()->getType() };
if (F->getName() != Intrinsic::getName(Intrinsic::masked_load, Tys)) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(),
Intrinsic::masked_load,
Tys);
@@ -188,7 +190,7 @@ static bool UpgradeIntrinsicFunction1(Fu
auto Args = F->getFunctionType()->params();
Type *Tys[] = { Args[0], Args[1] };
if (F->getName() != Intrinsic::getName(Intrinsic::masked_store, Tys)) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(),
Intrinsic::masked_store,
Tys);
@@ -204,7 +206,7 @@ static bool UpgradeIntrinsicFunction1(Fu
if (F->arg_size() == 2 && Name.startswith("objectsize.")) {
Type *Tys[2] = { F->getReturnType(), F->arg_begin()->getType() };
if (F->getName() != Intrinsic::getName(Intrinsic::objectsize, Tys)) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(),
Intrinsic::objectsize, Tys);
return true;
@@ -371,13 +373,13 @@ static bool UpgradeIntrinsicFunction1(Fu
// frcz.ss/sd may need to have an argument dropped
if (IsX86 && Name.startswith("xop.vfrcz.ss") && F->arg_size() == 2) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(),
Intrinsic::x86_xop_vfrcz_ss);
return true;
}
if (IsX86 && Name.startswith("xop.vfrcz.sd") && F->arg_size() == 2) {
- F->setName(Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(),
Intrinsic::x86_xop_vfrcz_sd);
return true;
@@ -395,13 +397,13 @@ static bool UpgradeIntrinsicFunction1(Fu
else
ShiftID = Name[18] == 'd' ? Intrinsic::x86_avx512_mask_psrl_di_512
: Intrinsic::x86_avx512_mask_psrl_qi_512;
- F->setName("llvm.x86." + Name + ".old");
+ rename(F);
NewFn = Intrinsic::getDeclaration(F->getParent(), ShiftID);
return true;
}
// Fix the FMA4 intrinsics to remove the 4
if (IsX86 && Name.startswith("fma4.")) {
- F->setName("llvm.x86.fma" + Name.substr(5));
+ rename(F);
NewFn = F;
return true;
}
@@ -410,7 +412,7 @@ static bool UpgradeIntrinsicFunction1(Fu
auto Params = F->getFunctionType()->params();
auto Idx = Params[2];
if (Idx->getScalarType()->isFloatingPointTy()) {
- F->setName("llvm.x86." + Name + ".old");
+ rename(F);
unsigned IdxSize = Idx->getPrimitiveSizeInBits();
unsigned EltSize = Idx->getScalarSizeInBits();
Intrinsic::ID Permil2ID;
Added: llvm/trunk/test/LTO/Resolution/X86/Inputs/intrinsic.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LTO/Resolution/X86/Inputs/intrinsic.ll?rev=283117&view=auto
==============================================================================
--- llvm/trunk/test/LTO/Resolution/X86/Inputs/intrinsic.ll (added)
+++ llvm/trunk/test/LTO/Resolution/X86/Inputs/intrinsic.ll Mon Oct 3 10:51:42 2016
@@ -0,0 +1,4 @@
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+%foo = type { }
+declare <4 x %foo*> @llvm.masked.load.v4p0foo.p0v4p0foo(<4 x %foo*>*, i32, <4 x i1>, <4 x %foo*>)
Added: llvm/trunk/test/LTO/Resolution/X86/intrinsic.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LTO/Resolution/X86/intrinsic.ll?rev=283117&view=auto
==============================================================================
--- llvm/trunk/test/LTO/Resolution/X86/intrinsic.ll (added)
+++ llvm/trunk/test/LTO/Resolution/X86/intrinsic.ll Mon Oct 3 10:51:42 2016
@@ -0,0 +1,8 @@
+; RUN: llvm-as %s -o %t1.o
+; RUN: llvm-as %p/Inputs/intrinsic.ll -o %t2.o
+; RUN: llvm-lto2 -o %t3.o %t1.o %t2.o -r %t1.o,foo
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+%foo = type { }
+declare void @foo( %foo* )
More information about the llvm-commits
mailing list