OSDN Git Service

GlobalISel: drop lifetime intrinsics during translation.
authorTim Northover <tnorthover@apple.com>
Fri, 10 Feb 2017 19:10:38 +0000 (19:10 +0000)
committerTim Northover <tnorthover@apple.com>
Fri, 10 Feb 2017 19:10:38 +0000 (19:10 +0000)
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

lib/CodeGen/GlobalISel/IRTranslator.cpp
test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll

index 361efe6..97292dc 100644 (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");
index e658a09..acb342a 100644 (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
+}