Codegen support for the llvm.invariant/lifetime.start/end intrinsics:
authorDuncan Sands <baldrick@free.fr>
Tue, 10 Nov 2009 09:08:09 +0000 (09:08 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 10 Nov 2009 09:08:09 +0000 (09:08 +0000)
just throw them away.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86678 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/IntrinsicLowering.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp

index 3e3b28a8109b9b39f7776c7adfa1525ea1f22bdb..8a3bd0bf4e00f6aa8d731cd4b9e3d29e30ad41f5 100644 (file)
@@ -515,6 +515,15 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
      if (CI->getType() != Type::getVoidTy(Context))
        CI->replaceAllUsesWith(ConstantInt::get(CI->getType(), 1));
      break;
+  case Intrinsic::invariant_start:
+  case Intrinsic::lifetime_start:
+    // Discard region information.
+    CI->replaceAllUsesWith(UndefValue::get(CI->getType()));
+    break;
+  case Intrinsic::invariant_end:
+  case Intrinsic::lifetime_end:
+    // Discard region information.
+    break;
   }
 
   assert(CI->use_empty() &&
index ee8bf791715e96ff1172f97cd225d5222538762e..9818e62a40489cbb60a113c1df57343c2429be57 100644 (file)
@@ -4409,6 +4409,16 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
     return implVisitBinaryAtomic(I, ISD::ATOMIC_LOAD_UMAX);
   case Intrinsic::atomic_swap:
     return implVisitBinaryAtomic(I, ISD::ATOMIC_SWAP);
+
+  case Intrinsic::invariant_start:
+  case Intrinsic::lifetime_start:
+    // Discard region information.
+    setValue(&I, DAG.getUNDEF(TLI.getPointerTy()));
+    return 0;
+  case Intrinsic::invariant_end:
+  case Intrinsic::lifetime_end:
+    // Discard region information.
+    return 0;
   }
 }