GlobalISel: drop lifetime intrinsics during translation.

We don't use them yet and they just cause problems.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294770 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Tim Northover 2017-02-10 19:10:38 +00:00
parent fc4c8411e4
commit 10fde8b13b
2 changed files with 19 additions and 0 deletions

View File

@ -555,6 +555,14 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
switch (ID) {
default:
break;
case Intrinsic::lifetime_start:
case Intrinsic::lifetime_end:
// Stack coloring is not enabled in O0 (which we care about now) so we can
// drop these. Make sure someone notices when we start compiling at higher
// opts though.
if (MF->getTarget().getOptLevel() != CodeGenOpt::None)
return false;
return true;
case Intrinsic::dbg_declare: {
const DbgDeclareInst &DI = cast<DbgDeclareInst>(CI);
assert(DI.getVariable() && "Missing variable");

View File

@ -1144,3 +1144,14 @@ define float @test_pow_intrin(float %l, float %r) {
%res = call float @llvm.pow.f32(float %l, float %r)
ret float %res
}
declare void @llvm.lifetime.start(i64, i8*)
declare void @llvm.lifetime.end(i64, i8*)
define void @test_lifetime_intrin() {
; CHECK-LABEL: name: test_lifetime_intrin
; CHECK: RET_ReallyLR
%slot = alloca i8, i32 4
call void @llvm.lifetime.start(i64 0, i8* %slot)
call void @llvm.lifetime.end(i64 0, i8* %slot)
ret void
}