Skip to content

Commit c2063de

Browse files
authored
Switch DirectX Target to use the Itanium ABI (llvm#111632)
To consolidate behavior of function mangling and limit the number of places that ABI changes will need to be made, this switches the DirectX target used for HLSL to use the Itanium ABI from the Microsoft ABI. The Itanium ABI has greater flexibility in decisions regarding mangling of new types of which we have more than a few yet to add. One effect of this will be that linking library shaders compiled with DXC will not be possible with shaders compiled with clang. That isn't considered a terribly interesting use case and one that would likely have been onerous to maintain anyway. This involved adding a function to call all global destructors as the Microsoft ABI had done. This requires a few changes to tests. Most notably the mangling style has changed which accounts for most of the changes. In making those changes, I took the opportunity to harmonize some very similar tests for greater consistency. I also shaved off some unneeded run flags that had probably been copied over from one test to another. Other changes effected by using the new ABI include using different types when manipulating smaller bitfields, eliminating an unnecessary alloca in one instance in this-assignment.hlsl, changing the way static local initialization is guarded, and changing the order of inout parameters getting copied in and out. That last is a subtle change in functionality, but one where there was sufficient inconsistency in the past that standardizing is important, but the particular direction of the standardization is less important for the sake of existing shaders. fixes llvm#110736
1 parent b800ff6 commit c2063de

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+667
-680
lines changed

clang/lib/Basic/Targets/DirectX.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
6262
PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());
6363
resetDataLayout("e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:"
6464
"32-f64:64-n8:16:32:64");
65-
TheCXXABI.set(TargetCXXABI::Microsoft);
65+
TheCXXABI.set(TargetCXXABI::GenericItanium);
6666
}
6767
bool useFP16ConversionIntrinsics() const override { return false; }
6868
void getTargetDefines(const LangOptions &Opts,

clang/lib/CodeGen/ItaniumCXXABI.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2997,6 +2997,10 @@ void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
29972997
if (D.isNoDestroy(CGM.getContext()))
29982998
return;
29992999

3000+
// HLSL doesn't support atexit.
3001+
if (CGM.getLangOpts().HLSL)
3002+
return CGM.AddCXXDtorEntry(dtor, addr);
3003+
30003004
// OpenMP offloading supports C++ constructors and destructors but we do not
30013005
// always have 'atexit' available. Instead lower these to use the LLVM global
30023006
// destructors which we can handle directly in the runtime. Note that this is

clang/test/CodeGenHLSL/ArrayTemporary.hlsl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ void call4(float Arr[2][2]) {
6868
// CHECK: [[Tmp2:%.*]] = alloca [4 x float]
6969
// CHECK: [[Tmp3:%.*]] = alloca [3 x i32]
7070
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp1]], ptr align 4 [[FA2]], i32 8, i1 false)
71-
// CHECK: call void @"??$template_fn@$$BY01M@@YAXY01M@Z"(ptr noundef byval([2 x float]) align 4 [[Tmp1]])
71+
// CHECK: call void @_Z11template_fnIA2_fEvT_(ptr noundef byval([2 x float]) align 4 [[Tmp1]])
7272
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp2]], ptr align 4 [[FA4]], i32 16, i1 false)
73-
// CHECK: call void @"??$template_fn@$$BY03M@@YAXY03M@Z"(ptr noundef byval([4 x float]) align 4 [[Tmp2]])
73+
// CHECK: call void @_Z11template_fnIA4_fEvT_(ptr noundef byval([4 x float]) align 4 [[Tmp2]])
7474
// CHECK: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp3]], ptr align 4 [[IA3]], i32 12, i1 false)
75-
// CHECK: call void @"??$template_fn@$$BY02H@@YAXY02H@Z"(ptr noundef byval([3 x i32]) align 4 [[Tmp3]])
75+
// CHECK: call void @_Z11template_fnIA3_iEvT_(ptr noundef byval([3 x i32]) align 4 [[Tmp3]])
7676

7777
template<typename T>
7878
void template_fn(T Val) {}
@@ -90,7 +90,7 @@ void template_call(float FA2[2], float FA4[4], int IA3[3]) {
9090

9191
// CHECK: [[Addr:%.*]] = getelementptr inbounds [2 x float], ptr [[FA2]], i32 0, i32 0
9292
// CHECK: [[Tmp:%.*]] = load float, ptr [[Addr]]
93-
// CHECK: call void @"??$template_fn@M@@YAXM@Z"(float noundef [[Tmp]])
93+
// CHECK: call void @_Z11template_fnIfEvT_(float noundef [[Tmp]])
9494

9595
// CHECK: [[Idx0:%.*]] = getelementptr inbounds [2 x float], ptr [[FA2]], i32 0, i32 0
9696
// CHECK: [[Val0:%.*]] = load float, ptr [[Idx0]]

clang/test/CodeGenHLSL/BasicFeatures/OutputArguments.hlsl

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,10 @@ void order_matters(inout int X, inout int Y) {
260260
// CHECK: store i32 [[VVal]], ptr [[Tmp0]]
261261
// CHECK: [[VVal:%.*]] = load i32, ptr [[V]]
262262
// CHECK: store i32 [[VVal]], ptr [[Tmp1]]
263-
// CHECK: call void {{.*}}order_matters{{.*}}(ptr noalias noundef nonnull align 4 dereferenceable(4) [[Tmp1]], ptr noalias noundef nonnull align 4 dereferenceable(4) [[Tmp0]])
264-
// CHECK: [[Arg1Val:%.*]] = load i32, ptr [[Tmp1]]
263+
// CHECK: call void {{.*}}order_matters{{.*}}(ptr noalias noundef nonnull align 4 dereferenceable(4) [[Tmp0]], ptr noalias noundef nonnull align 4 dereferenceable(4) [[Tmp1]])
264+
// CHECK: [[Arg1Val:%.*]] = load i32, ptr [[Tmp0]]
265265
// CHECK: store i32 [[Arg1Val]], ptr [[V]]
266-
// CHECK: [[Arg2Val:%.*]] = load i32, ptr [[Tmp0]]
266+
// CHECK: [[Arg2Val:%.*]] = load i32, ptr [[Tmp1]]
267267
// CHECK: store i32 [[Arg2Val]], ptr [[V]]
268268

269269
// OPT: ret i32 2
@@ -289,17 +289,19 @@ void setFour(inout int I) {
289289
// CHECK: [[B:%.*]] = alloca %struct.B
290290
// CHECK: [[Tmp:%.*]] = alloca i32
291291

292-
// CHECK: [[BFLoad:%.*]] = load i32, ptr [[B]]
293-
// CHECK: [[BFshl:%.*]] = shl i32 [[BFLoad]], 24
294-
// CHECK: [[BFashr:%.*]] = ashr i32 [[BFshl]], 24
295-
// CHECK: store i32 [[BFashr]], ptr [[Tmp]]
292+
// CHECK: [[BFLoad:%.*]] = load i16, ptr [[B]]
293+
// CHECK: [[BFshl:%.*]] = shl i16 [[BFLoad]], 8
294+
// CHECK: [[BFashr:%.*]] = ashr i16 [[BFshl]], 8
295+
// CHECK: [[BFcast:%.*]] = sext i16 [[BFashr]] to i32
296+
// CHECK: store i32 [[BFcast]], ptr [[Tmp]]
296297
// CHECK: call void {{.*}}setFour{{.*}}(ptr noalias noundef nonnull align 4 dereferenceable(4) [[Tmp]])
297298
// CHECK: [[RetVal:%.*]] = load i32, ptr [[Tmp]]
298-
// CHECK: [[BFLoad:%.*]] = load i32, ptr [[B]]
299-
// CHECK: [[BFValue:%.*]] = and i32 [[RetVal]], 255
300-
// CHECK: [[ZerodField:%.*]] = and i32 [[BFLoad]], -256
301-
// CHECK: [[BFSet:%.*]] = or i32 [[ZerodField]], [[BFValue]]
302-
// CHECK: store i32 [[BFSet]], ptr [[B]]
299+
// CHECK: [[TruncVal:%.*]] = trunc i32 [[RetVal]] to i16
300+
// CHECK: [[BFLoad:%.*]] = load i16, ptr [[B]]
301+
// CHECK: [[BFValue:%.*]] = and i16 [[TruncVal]], 255
302+
// CHECK: [[ZerodField:%.*]] = and i16 [[BFLoad]], -256
303+
// CHECK: [[BFSet:%.*]] = or i16 [[ZerodField]], [[BFValue]]
304+
// CHECK: store i16 [[BFSet]], ptr [[B]]
303305

304306
// OPT: ret i32 8
305307
export int case11() {

clang/test/CodeGenHLSL/GlobalConstructorFunction.hlsl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ void main(unsigned GI : SV_GroupIndex) {}
2525
// CHECK: define void @main()
2626
// CHECK-NEXT: entry:
2727
// Verify function constructors are emitted
28-
// NOINLINE-NEXT: call void @"?call_me_first@@YAXXZ"()
29-
// NOINLINE-NEXT: call void @"?then_call_me@@YAXXZ"()
28+
// NOINLINE-NEXT: call void @_Z13call_me_firstv()
29+
// NOINLINE-NEXT: call void @_Z12then_call_mev()
3030
// NOINLINE-NEXT: %0 = call i32 @llvm.dx.flattened.thread.id.in.group()
31-
// NOINLINE-NEXT: call void @"?main@@YAXI@Z"(i32 %0)
32-
// NOINLINE-NEXT: call void @"?call_me_last@@YAXXZ"(
31+
// NOINLINE-NEXT: call void @_Z4mainj(i32 %0)
32+
// NOINLINE-NEXT: call void @_Z12call_me_lastv(
3333
// NOINLINE-NEXT: ret void
3434

3535
// Verify constructor calls are inlined when AlwaysInline is run

clang/test/CodeGenHLSL/GlobalConstructorLib.hlsl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ void FirstEntry() {}
1313
// CHECK: define void @FirstEntry()
1414
// CHECK-NEXT: entry:
1515
// NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl()
16-
// NOINLINE-NEXT: call void @"?FirstEntry@@YAXXZ"()
16+
// NOINLINE-NEXT: call void @_Z10FirstEntryv()
1717
// Verify inlining leaves only calls to "llvm." intrinsics
1818
// INLINE-NOT: call {{[^@]*}} @{{[^l][^l][^v][^m][^\.]}}
1919
// CHECK: ret void
@@ -25,14 +25,18 @@ void SecondEntry() {}
2525
// CHECK: define void @SecondEntry()
2626
// CHECK-NEXT: entry:
2727
// NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl()
28-
// NOINLINE-NEXT: call void @"?SecondEntry@@YAXXZ"()
28+
// NOINLINE-NEXT: call void @_Z11SecondEntryv()
2929
// Verify inlining leaves only calls to "llvm." intrinsics
3030
// INLINE-NOT: call {{[^@]*}} @{{[^l][^l][^v][^m][^\.]}}
3131
// CHECK: ret void
3232

3333

3434
// Verify the constructor is alwaysinline
3535
// NOINLINE: ; Function Attrs: {{.*}}alwaysinline
36-
// NOINLINE-NEXT: define internal void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl() [[IntAttr:\#[0-9]+]]
36+
// NOINLINE-NEXT: define linkonce_odr void @_ZN4hlsl8RWBufferIfEC2Ev({{.*}} [[CtorAttr:\#[0-9]+]]
3737

38-
// NOINLINE: attributes [[IntAttr]] = {{.*}} alwaysinline
38+
// NOINLINE: ; Function Attrs: {{.*}}alwaysinline
39+
// NOINLINE-NEXT: define internal void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl() [[InitAttr:\#[0-9]+]]
40+
41+
// NOINLINE-DAG: attributes [[InitAttr]] = {{.*}} alwaysinline
42+
// NOINLINE-DAG: attributes [[CtorAttr]] = {{.*}} alwaysinline

clang/test/CodeGenHLSL/GlobalConstructors.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ void main(unsigned GI : SV_GroupIndex) {}
1212
//CHECK-NEXT: entry:
1313
//CHECK-NEXT: call void @_GLOBAL__sub_I_GlobalConstructors.hlsl()
1414
//CHECK-NEXT: %0 = call i32 @llvm.dx.flattened.thread.id.in.group()
15-
//CHECK-NEXT: call void @"?main@@YAXI@Z"(i32 %0)
15+
//CHECK-NEXT: call void @_Z4mainj(i32 %0)
1616
//CHECK-NEXT: ret void

clang/test/CodeGenHLSL/GlobalDestructors.hlsl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -std=hlsl202x -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s --check-prefixes=CS,NOINLINE,CHECK
2-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -std=hlsl202x -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s --check-prefixes=LIB,NOINLINE,CHECK
3-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -std=hlsl202x -emit-llvm -O0 %s -o - | FileCheck %s --check-prefixes=INLINE,CHECK
4-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -std=hlsl202x -emit-llvm -O0 %s -o - | FileCheck %s --check-prefixes=INLINE,CHECK
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s --check-prefixes=CS,NOINLINE,CHECK
2+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s --check-prefixes=LIB,NOINLINE,CHECK
3+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -emit-llvm -O0 %s -o - | FileCheck %s --check-prefixes=INLINE,CHECK
4+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -O0 %s -o - | FileCheck %s --check-prefixes=INLINE,CHECK
55

66
// Tests that constructors and destructors are appropriately generated for globals
77
// and that their calls are inlined when AlwaysInline is run
@@ -59,7 +59,7 @@ void main(unsigned GI : SV_GroupIndex) {
5959
// Verify destructor is emitted
6060
// NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalDestructors.hlsl()
6161
// NOINLINE-NEXT: %0 = call i32 @llvm.dx.flattened.thread.id.in.group()
62-
// NOINLINE-NEXT: call void @"?main@@YAXI@Z"(i32 %0)
62+
// NOINLINE-NEXT: call void @_Z4mainj(i32 %0)
6363
// NOINLINE-NEXT: call void @_GLOBAL__D_a()
6464
// NOINLINE-NEXT: ret void
6565
// Verify inlining leaves only calls to "llvm." intrinsics
@@ -71,8 +71,8 @@ void main(unsigned GI : SV_GroupIndex) {
7171

7272
// NOINLINE: define internal void @_GLOBAL__D_a() [[IntAttr:\#[0-9]+]]
7373
// NOINLINE-NEXT: entry:
74-
// NOINLINE-NEXT: call void @"??1Tail@@QAA@XZ"(ptr @"?T@?1??Wag@@YAXXZ@4UTail@@A")
75-
// NOINLINE-NEXT: call void @"??1Pupper@@QAA@XZ"(ptr @"?GlobalPup@@3UPupper@@A")
74+
// NOINLINE-NEXT: call void @_ZN4TailD1Ev(ptr @_ZZ3WagvE1T)
75+
// NOINLINE-NEXT: call void @_ZN6PupperD1Ev(ptr @GlobalPup)
7676
// NOINLINE-NEXT: ret void
7777

7878
// NOINLINE: attributes [[IntAttr]] = {{.*}} alwaysinline

clang/test/CodeGenHLSL/basic_types.hlsl

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,38 @@
66
// RUN: -emit-llvm -disable-llvm-passes -o - -DNAMESPACED| FileCheck %s
77

88

9-
// CHECK:"?uint16_t_Val@@3GA" = global i16 0, align 2
10-
// CHECK:"?int16_t_Val@@3FA" = global i16 0, align 2
11-
// CHECK:"?uint_Val@@3IA" = global i32 0, align 4
12-
// CHECK:"?uint64_t_Val@@3KA" = global i64 0, align 8
13-
// CHECK:"?int64_t_Val@@3JA" = global i64 0, align 8
14-
// CHECK:"?int16_t2_Val@@3T?$__vector@F$01@__clang@@A" = global <2 x i16> zeroinitializer, align 4
15-
// CHECK:"?int16_t3_Val@@3T?$__vector@F$02@__clang@@A" = global <3 x i16> zeroinitializer, align 8
16-
// CHECK:"?int16_t4_Val@@3T?$__vector@F$03@__clang@@A" = global <4 x i16> zeroinitializer, align 8
17-
// CHECK:"?uint16_t2_Val@@3T?$__vector@G$01@__clang@@A" = global <2 x i16> zeroinitializer, align 4
18-
// CHECK:"?uint16_t3_Val@@3T?$__vector@G$02@__clang@@A" = global <3 x i16> zeroinitializer, align 8
19-
// CHECK:"?uint16_t4_Val@@3T?$__vector@G$03@__clang@@A" = global <4 x i16> zeroinitializer, align 8
20-
// CHECK:"?int2_Val@@3T?$__vector@H$01@__clang@@A" = global <2 x i32> zeroinitializer, align 8
21-
// CHECK:"?int3_Val@@3T?$__vector@H$02@__clang@@A" = global <3 x i32> zeroinitializer, align 16
22-
// CHECK:"?int4_Val@@3T?$__vector@H$03@__clang@@A" = global <4 x i32> zeroinitializer, align 16
23-
// CHECK:"?uint2_Val@@3T?$__vector@I$01@__clang@@A" = global <2 x i32> zeroinitializer, align 8
24-
// CHECK:"?uint3_Val@@3T?$__vector@I$02@__clang@@A" = global <3 x i32> zeroinitializer, align 16
25-
// CHECK:"?uint4_Val@@3T?$__vector@I$03@__clang@@A" = global <4 x i32> zeroinitializer, align 16
26-
// CHECK:"?int64_t2_Val@@3T?$__vector@J$01@__clang@@A" = global <2 x i64> zeroinitializer, align 16
27-
// CHECK:"?int64_t3_Val@@3T?$__vector@J$02@__clang@@A" = global <3 x i64> zeroinitializer, align 32
28-
// CHECK:"?int64_t4_Val@@3T?$__vector@J$03@__clang@@A" = global <4 x i64> zeroinitializer, align 32
29-
// CHECK:"?uint64_t2_Val@@3T?$__vector@K$01@__clang@@A" = global <2 x i64> zeroinitializer, align 16
30-
// CHECK:"?uint64_t3_Val@@3T?$__vector@K$02@__clang@@A" = global <3 x i64> zeroinitializer, align 32
31-
// CHECK:"?uint64_t4_Val@@3T?$__vector@K$03@__clang@@A" = global <4 x i64> zeroinitializer, align 32
32-
// CHECK:"?half2_Val@@3T?$__vector@$f16@$01@__clang@@A" = global <2 x half> zeroinitializer, align 4
33-
// CHECK:"?half3_Val@@3T?$__vector@$f16@$02@__clang@@A" = global <3 x half> zeroinitializer, align 8
34-
// CHECK:"?half4_Val@@3T?$__vector@$f16@$03@__clang@@A" = global <4 x half> zeroinitializer, align 8
35-
// CHECK:"?float2_Val@@3T?$__vector@M$01@__clang@@A" = global <2 x float> zeroinitializer, align 8
36-
// CHECK:"?float3_Val@@3T?$__vector@M$02@__clang@@A" = global <3 x float> zeroinitializer, align 16
37-
// CHECK:"?float4_Val@@3T?$__vector@M$03@__clang@@A" = global <4 x float> zeroinitializer, align 16
38-
// CHECK:"?double2_Val@@3T?$__vector@N$01@__clang@@A" = global <2 x double> zeroinitializer, align 16
39-
// CHECK:"?double3_Val@@3T?$__vector@N$02@__clang@@A" = global <3 x double> zeroinitializer, align 32
40-
// CHECK:"?double4_Val@@3T?$__vector@N$03@__clang@@A" = global <4 x double> zeroinitializer, align 32
9+
// CHECK: @uint16_t_Val = global i16 0, align 2
10+
// CHECK: @int16_t_Val = global i16 0, align 2
11+
// CHECK: @uint_Val = global i32 0, align 4
12+
// CHECK: @uint64_t_Val = global i64 0, align 8
13+
// CHECK: @int64_t_Val = global i64 0, align 8
14+
// CHECK: @int16_t2_Val = global <2 x i16> zeroinitializer, align 4
15+
// CHECK: @int16_t3_Val = global <3 x i16> zeroinitializer, align 8
16+
// CHECK: @int16_t4_Val = global <4 x i16> zeroinitializer, align 8
17+
// CHECK: @uint16_t2_Val = global <2 x i16> zeroinitializer, align 4
18+
// CHECK: @uint16_t3_Val = global <3 x i16> zeroinitializer, align 8
19+
// CHECK: @uint16_t4_Val = global <4 x i16> zeroinitializer, align 8
20+
// CHECK: @int2_Val = global <2 x i32> zeroinitializer, align 8
21+
// CHECK: @int3_Val = global <3 x i32> zeroinitializer, align 16
22+
// CHECK: @int4_Val = global <4 x i32> zeroinitializer, align 16
23+
// CHECK: @uint2_Val = global <2 x i32> zeroinitializer, align 8
24+
// CHECK: @uint3_Val = global <3 x i32> zeroinitializer, align 16
25+
// CHECK: @uint4_Val = global <4 x i32> zeroinitializer, align 16
26+
// CHECK: @int64_t2_Val = global <2 x i64> zeroinitializer, align 16
27+
// CHECK: @int64_t3_Val = global <3 x i64> zeroinitializer, align 32
28+
// CHECK: @int64_t4_Val = global <4 x i64> zeroinitializer, align 32
29+
// CHECK: @uint64_t2_Val = global <2 x i64> zeroinitializer, align 16
30+
// CHECK: @uint64_t3_Val = global <3 x i64> zeroinitializer, align 32
31+
// CHECK: @uint64_t4_Val = global <4 x i64> zeroinitializer, align 32
32+
// CHECK: @half2_Val = global <2 x half> zeroinitializer, align 4
33+
// CHECK: @half3_Val = global <3 x half> zeroinitializer, align 8
34+
// CHECK: @half4_Val = global <4 x half> zeroinitializer, align 8
35+
// CHECK: @float2_Val = global <2 x float> zeroinitializer, align 8
36+
// CHECK: @float3_Val = global <3 x float> zeroinitializer, align 16
37+
// CHECK: @float4_Val = global <4 x float> zeroinitializer, align 16
38+
// CHECK: @double2_Val = global <2 x double> zeroinitializer, align 16
39+
// CHECK: @double3_Val = global <3 x double> zeroinitializer, align 32
40+
// CHECK: @double4_Val = global <4 x double> zeroinitializer, align 32
4141

4242
#ifdef NAMESPACED
4343
#define TYPE_DECL(T) hlsl::T T##_Val

clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ void main() {
1616
}
1717

1818
// CHECK: !hlsl.uavs = !{![[Single:[0-9]+]], ![[Array:[0-9]+]], ![[SingleAllocated:[0-9]+]], ![[ArrayAllocated:[0-9]+]], ![[SingleSpace:[0-9]+]], ![[ArraySpace:[0-9]+]]}
19-
// CHECK-DAG: ![[Single]] = !{ptr @"?Buffer1@@3V?$RWBuffer@M@hlsl@@A", i32 10, i32 9, i1 false, i32 -1, i32 0}
20-
// CHECK-DAG: ![[Array]] = !{ptr @"?BufferArray@@3PAV?$RWBuffer@T?$__vector@M$03@__clang@@@hlsl@@A", i32 10, i32 9, i1 false, i32 -1, i32 0}
21-
// CHECK-DAG: ![[SingleAllocated]] = !{ptr @"?Buffer2@@3V?$RWBuffer@M@hlsl@@A", i32 10, i32 9, i1 false, i32 3, i32 0}
22-
// CHECK-DAG: ![[ArrayAllocated]] = !{ptr @"?BufferArray2@@3PAV?$RWBuffer@T?$__vector@M$03@__clang@@@hlsl@@A", i32 10, i32 9, i1 false, i32 4, i32 0}
23-
// CHECK-DAG: ![[SingleSpace]] = !{ptr @"?Buffer3@@3V?$RWBuffer@M@hlsl@@A", i32 10, i32 9, i1 false, i32 3, i32 1}
24-
// CHECK-DAG: ![[ArraySpace]] = !{ptr @"?BufferArray3@@3PAV?$RWBuffer@T?$__vector@M$03@__clang@@@hlsl@@A", i32 10, i32 9, i1 false, i32 4, i32 1}
19+
// CHECK-DAG: ![[Single]] = !{ptr @Buffer1, i32 10, i32 9, i1 false, i32 -1, i32 0}
20+
// CHECK-DAG: ![[Array]] = !{ptr @BufferArray, i32 10, i32 9, i1 false, i32 -1, i32 0}
21+
// CHECK-DAG: ![[SingleAllocated]] = !{ptr @Buffer2, i32 10, i32 9, i1 false, i32 3, i32 0}
22+
// CHECK-DAG: ![[ArrayAllocated]] = !{ptr @BufferArray2, i32 10, i32 9, i1 false, i32 4, i32 0}
23+
// CHECK-DAG: ![[SingleSpace]] = !{ptr @Buffer3, i32 10, i32 9, i1 false, i32 3, i32 1}
24+
// CHECK-DAG: ![[ArraySpace]] = !{ptr @BufferArray3, i32 10, i32 9, i1 false, i32 4, i32 1}

clang/test/CodeGenHLSL/builtins/RWBuffer-elementtype.hlsl

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@ void main(int GI : SV_GroupIndex) {
3737
BufF32x3[GI] = 0;
3838
}
3939

40-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufI16@@3V?$RWBuffer@F@hlsl@@A", i32 10, i32 2,
41-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufU16@@3V?$RWBuffer@G@hlsl@@A", i32 10, i32 3,
42-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufI32@@3V?$RWBuffer@H@hlsl@@A", i32 10, i32 4,
43-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufU32@@3V?$RWBuffer@I@hlsl@@A", i32 10, i32 5,
44-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufI64@@3V?$RWBuffer@J@hlsl@@A", i32 10, i32 6,
45-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufU64@@3V?$RWBuffer@K@hlsl@@A", i32 10, i32 7,
46-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufF16@@3V?$RWBuffer@$f16@@hlsl@@A", i32 10, i32 8,
47-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufF32@@3V?$RWBuffer@M@hlsl@@A", i32 10, i32 9,
48-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufF64@@3V?$RWBuffer@N@hlsl@@A", i32 10, i32 10,
49-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufI16x4@@3V?$RWBuffer@T?$__vector@F$03@__clang@@@hlsl@@A", i32 10, i32 2,
50-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufU32x3@@3V?$RWBuffer@T?$__vector@I$02@__clang@@@hlsl@@A", i32 10, i32 5,
51-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufF16x2@@3V?$RWBuffer@T?$__vector@$f16@$01@__clang@@@hlsl@@A", i32 10, i32 8,
52-
// CHECK: !{{[0-9]+}} = !{ptr @"?BufF32x3@@3V?$RWBuffer@T?$__vector@M$02@__clang@@@hlsl@@A", i32 10, i32 9,
40+
// CHECK: !{{[0-9]+}} = !{ptr @BufI16, i32 10, i32 2,
41+
// CHECK: !{{[0-9]+}} = !{ptr @BufU16, i32 10, i32 3,
42+
// CHECK: !{{[0-9]+}} = !{ptr @BufI32, i32 10, i32 4,
43+
// CHECK: !{{[0-9]+}} = !{ptr @BufU32, i32 10, i32 5,
44+
// CHECK: !{{[0-9]+}} = !{ptr @BufI64, i32 10, i32 6,
45+
// CHECK: !{{[0-9]+}} = !{ptr @BufU64, i32 10, i32 7,
46+
// CHECK: !{{[0-9]+}} = !{ptr @BufF16, i32 10, i32 8,
47+
// CHECK: !{{[0-9]+}} = !{ptr @BufF32, i32 10, i32 9,
48+
// CHECK: !{{[0-9]+}} = !{ptr @BufF64, i32 10, i32 10,
49+
// CHECK: !{{[0-9]+}} = !{ptr @BufI16x4, i32 10, i32 2,
50+
// CHECK: !{{[0-9]+}} = !{ptr @BufU32x3, i32 10, i32 5,
51+
// CHECK: !{{[0-9]+}} = !{ptr @BufF16x2, i32 10, i32 8,
52+
// CHECK: !{{[0-9]+}} = !{ptr @BufF32x3, i32 10, i32 9,

clang/test/CodeGenHLSL/builtins/RasterizerOrderedBuffer-annotations.hlsl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ RasterizerOrderedBuffer<vector<float, 4> > BufferArray3[4] : register(u4, space1
1212
void main() {}
1313

1414
// CHECK: !hlsl.uavs = !{![[Single:[0-9]+]], ![[Array:[0-9]+]], ![[SingleAllocated:[0-9]+]], ![[ArrayAllocated:[0-9]+]], ![[SingleSpace:[0-9]+]], ![[ArraySpace:[0-9]+]]}
15-
// CHECK-DAG: ![[Single]] = !{ptr @"?Buffer1@@3V?$RasterizerOrderedBuffer@M@hlsl@@A", i32 10, i32 9, i1 true, i32 -1, i32 0}
16-
// CHECK-DAG: ![[Array]] = !{ptr @"?BufferArray@@3PAV?$RasterizerOrderedBuffer@T?$__vector@M$03@__clang@@@hlsl@@A", i32 10, i32 9, i1 true, i32 -1, i32 0}
17-
// CHECK-DAG: ![[SingleAllocated]] = !{ptr @"?Buffer2@@3V?$RasterizerOrderedBuffer@M@hlsl@@A", i32 10, i32 9, i1 true, i32 3, i32 0}
18-
// CHECK-DAG: ![[ArrayAllocated]] = !{ptr @"?BufferArray2@@3PAV?$RasterizerOrderedBuffer@T?$__vector@M$03@__clang@@@hlsl@@A", i32 10, i32 9, i1 true, i32 4, i32 0}
19-
// CHECK-DAG: ![[SingleSpace]] = !{ptr @"?Buffer3@@3V?$RasterizerOrderedBuffer@M@hlsl@@A", i32 10, i32 9, i1 true, i32 3, i32 1}
20-
// CHECK-DAG: ![[ArraySpace]] = !{ptr @"?BufferArray3@@3PAV?$RasterizerOrderedBuffer@T?$__vector@M$03@__clang@@@hlsl@@A", i32 10, i32 9, i1 true, i32 4, i32 1}
15+
// CHECK-DAG: ![[Single]] = !{ptr @Buffer1, i32 10, i32 9, i1 true, i32 -1, i32 0}
16+
// CHECK-DAG: ![[Array]] = !{ptr @BufferArray, i32 10, i32 9, i1 true, i32 -1, i32 0}
17+
// CHECK-DAG: ![[SingleAllocated]] = !{ptr @Buffer2, i32 10, i32 9, i1 true, i32 3, i32 0}
18+
// CHECK-DAG: ![[ArrayAllocated]] = !{ptr @BufferArray2, i32 10, i32 9, i1 true, i32 4, i32 0}
19+
// CHECK-DAG: ![[SingleSpace]] = !{ptr @Buffer3, i32 10, i32 9, i1 true, i32 3, i32 1}
20+
// CHECK-DAG: ![[ArraySpace]] = !{ptr @BufferArray3, i32 10, i32 9, i1 true, i32 4, i32 1}

0 commit comments

Comments
 (0)