Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions clang/test/CodeGenDirectX/unsupported_intrinsic.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// RUN: %if clang-dxc %{not %clang_dxc -T lib_6_3 %s 2>&1 | FileCheck %s %}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think there's a clang-dxc feature, so I suspect this just never runs at all. This will fail if the DirectX backend isn't available, so I don't think gating on clang-dxc would be correct anyway.

I think you actually want REQUIRES: directx-registered-target in this test, and to drop the %if stuff.


// CHECK: error: Unsupported intrinsic llvm.vector.reduce.and.v4i32 for DXIL lowering

export int vecReduceAndTest(int4 vec) {
return __builtin_reduce_and(vec);
}
2 changes: 1 addition & 1 deletion llvm/include/llvm/IR/DiagnosticInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class DiagnosticInfo {
using DiagnosticHandlerFunction = std::function<void(const DiagnosticInfo &)>;

class DiagnosticInfoGeneric : public DiagnosticInfo {
const Twine &MsgStr;
const Twine MsgStr;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All of the Twine usage in Diagnostic info is super sketchy. I think we can drop this from this change and do it more comprehensively here: #136371

const Instruction *Inst = nullptr;

public:
Expand Down
9 changes: 5 additions & 4 deletions llvm/lib/Target/DirectX/DXILOpLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

#include "DXILOpLowering.h"
#include "DXILConstants.h"
#include "DXILIntrinsicExpansion.h"
#include "DXILOpBuilder.h"
#include "DXILShaderFlags.h"
#include "DirectX.h"
Expand All @@ -27,6 +26,7 @@
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FormatVariadic.h"

#define DEBUG_TYPE "dxil-op-lower"

Expand Down Expand Up @@ -756,9 +756,10 @@ class OpLowerer {
case Intrinsic::not_intrinsic:
continue;
default: {
DiagnosticInfoUnsupported Diag(
F, "Unsupported intrinsic for DXIL lowering");
M.getContext().diagnose(Diag);
std::string Msg =
formatv("Unsupported intrinsic {0} for DXIL lowering", F.getName())
.str();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might as well use SmallString here:

Suggested change
std::string Msg =
formatv("Unsupported intrinsic {0} for DXIL lowering", F.getName())
.str();
SmallString<128> Msg =
formatv("Unsupported intrinsic {0} for DXIL lowering", F.getName());

M.getContext().emitError(Msg);
HasErrors |= true;
break;
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/DirectX/unsupported_intrinsic.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
; RUN: not opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-library %s 2>&1 | FileCheck %s

; CHECK: error: <unknown>:0:0: in function llvm.vector.reduce.and.v4i32 i32 (<4 x i32>): Unsupported intrinsic for DXIL lowering
; CHECK: error: Unsupported intrinsic llvm.vector.reduce.and.v4i32 for DXIL lowering
define i32 @fn_and(<4 x i32> %0) local_unnamed_addr #0 {
%2 = tail call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %0)
ret i32 %2
Expand Down
Loading