Index: llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp =================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp +++ llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -1216,6 +1216,7 @@ updateValueMap(II, ResultReg); return true; } + case Intrinsic::invariant_group_barrier: case Intrinsic::expect: { unsigned ResultReg = getRegForValue(II->getArgOperand(0)); if (!ResultReg) Index: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp =================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -5460,6 +5460,7 @@ } 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: llvm/trunk/test/CodeGen/Generic/intrinsics.ll =================================================================== --- llvm/trunk/test/CodeGen/Generic/intrinsics.ll +++ llvm/trunk/test/CodeGen/Generic/intrinsics.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s +; RUN: llc -O0 < %s ;; SQRT declare float @llvm.sqrt.f32(float) @@ -38,3 +39,9 @@ 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 +}