diff --git a/llvm/lib/Target/DirectX/DXILPrepare.cpp b/llvm/lib/Target/DirectX/DXILPrepare.cpp --- a/llvm/lib/Target/DirectX/DXILPrepare.cpp +++ b/llvm/lib/Target/DirectX/DXILPrepare.cpp @@ -127,7 +127,7 @@ continue; } // Only insert bitcasts if the IR is using opaque pointers. - if (!M.getContext().hasSetOpaquePointersValue()) + if (M.getContext().supportsTypedPointers()) continue; // Emtting NoOp bitcast instructions allows the ValueEnumerator to be diff --git a/llvm/test/CodeGen/DirectX/typed_ptr.ll b/llvm/test/CodeGen/DirectX/typed_ptr.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/DirectX/typed_ptr.ll @@ -0,0 +1,10 @@ +; RUN: opt -S -dxil-prepare < %s | FileCheck %s +target triple = "dxil-unknown-unknown" + +; Make sure not crash when has typed ptr. +; CHECK:@test + +define i64 @test(i64* %p) { + %v = load i64, i64* %p + ret i64 %v +}