Index: lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp =================================================================== --- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -1254,7 +1254,8 @@ !I->isTerminator() && // Terminators aren't folded. !isa(I) && // Debug instructions aren't folded. !I->isEHPad() && // EH pad instructions aren't folded. - !FuncInfo->isExportedInst(I); // Exported instrs must be computed. + !FuncInfo->isExportedInst(I) && // Exported instrs must be computed. + !isGCRelocate(I); // GCRelocate cannot be skipped. } /// Set up SwiftErrorVals by going through the function. If the function has Index: test/CodeGen/X86/fast-isel-gc-intrinsics.ll =================================================================== --- test/CodeGen/X86/fast-isel-gc-intrinsics.ll +++ test/CodeGen/X86/fast-isel-gc-intrinsics.ll @@ -29,6 +29,8 @@ %safepoint_token = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, i8 addrspace(1)* %v) %call1 = call zeroext i1 @llvm.experimental.gc.result.i1(token %safepoint_token) %vnew = call i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %safepoint_token, i32 7, i32 7) + br label %exit +exit: ret i1 %call1 }