]> granicus.if.org Git - llvm/commitdiff
Add -O0 support for @llvm.invariant.group.barrier by discarding it if it gets to...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 7 Nov 2016 16:47:20 +0000 (16:47 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 7 Nov 2016 16:47:20 +0000 (16:47 +0000)
Differential Revision: https://reviews.llvm.org/D26292

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

lib/CodeGen/SelectionDAG/FastISel.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
test/CodeGen/Generic/intrinsics.ll

index 4ca22497703d3a770a51822890292d3514af3317..452bb0594941a63437cc7d78f2b7a38a9ddb7096 100644 (file)
@@ -1216,6 +1216,7 @@ bool FastISel::selectIntrinsicCall(const IntrinsicInst *II) {
     updateValueMap(II, ResultReg);
     return true;
   }
+  case Intrinsic::invariant_group_barrier:
   case Intrinsic::expect: {
     unsigned ResultReg = getRegForValue(II->getArgOperand(0));
     if (!ResultReg)
index eea5dcc0cf42ff3de9c66f1c9c9b17e19ef18ef6..b588d9b193f0cf30ff5610e3cbf64cc87bc8cd60 100644 (file)
@@ -5460,6 +5460,7 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
   }
   case Intrinsic::annotation:
   case Intrinsic::ptr_annotation:
+  case Intrinsic::invariant_group_barrier:
     // Drop the intrinsic, but forward the value
     setValue(&I, getValue(I.getOperand(0)));
     return nullptr;
index 29bc499adfc598e9b0f82668ff3c05858df85d8e..4d04786a58d466c4fe55d0ba1c38842873f8c9a3 100644 (file)
@@ -1,4 +1,5 @@
 ; RUN: llc < %s
+; RUN: llc -O0 < %s
 
 ;; SQRT
 declare float @llvm.sqrt.f32(float)
@@ -38,3 +39,9 @@ define double @test_cos(float %F) {
         ret double %I
 }
 
+declare i8* @llvm.invariant.group.barrier(i8*)
+
+define i8* @barrier(i8* %p) {
+        %q = call i8* @llvm.invariant.group.barrier(i8* %p)
+        ret i8* %q
+}