brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.8 KiB · b72cf58 Raw
461 lines · plain
1// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-compute -fnative-half-type -fnative-int16-type -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s2 3// CHECK: %__cblayout_CBScalars = type <{4// CHECK-SAME:   float, target("dx.Padding", 4), double,5// CHECK-SAME:   half, target("dx.Padding", 6), i64,6// CHECK-SAME:   i32, i16, target("dx.Padding", 2), i32, target("dx.Padding", 4),7// CHECK-SAME:   i648// CHECK-SAME: }>9 10// CHECK: %__cblayout_CBVectors = type <{11// CHECK-SAME:   <3 x float>, target("dx.Padding", 4),12// CHECK-SAME:   <3 x double>, <2 x half>, target("dx.Padding", 4),13// CHECK-SAME:   <3 x i64>, target("dx.Padding", 8),14// CHECK-SAME:   <4 x i32>,15// CHECK-SAME:   <3 x i16>, target("dx.Padding", 10),16// CHECK-SAME:   <3 x i64>17// CHECK-SAME: }>18 19// CHECK: %__cblayout_CBArrays = type <{20// CHECK-SAME: <{ [2 x <{ float, target("dx.Padding", 12) }>], float }>, target("dx.Padding", 12),21// CHECK-SAME: <{ [1 x <{ <3 x double>, target("dx.Padding", 8) }>], <3 x double> }>, target("dx.Padding", 8),22// CHECK-SAME: <{ [1 x <{23// CHECK-SAME:   <{ [1 x <{ half, target("dx.Padding", 14) }>], half }>, target("dx.Padding", 14) }>],24// CHECK-SAME:   <{ [1 x <{ half, target("dx.Padding", 14) }>], half }>25// CHECK-SAME: }>, target("dx.Padding", 14),26// CHECK-SAME: <{ [2 x <{ i64, target("dx.Padding", 8) }>], i64 }>, target("dx.Padding", 8),27// CHECK-SAME: [2 x [3 x [4 x <4 x i32>]]]28// CHECK-SAME: [1 x i16], target("dx.Padding", 14),29// CHECK-SAME: <{ [1 x <{ i64, target("dx.Padding", 8) }>], i64 }>, target("dx.Padding", 8),30// CHECK-SAME: <{ [3 x <{ i32, target("dx.Padding", 12) }>], i32 }>31// CHECK-SAME: }>32 33// CHECK: %__cblayout_CBStructs = type <{34// CHECK-SAME:   %A, target("dx.Padding", 8),35 36// TODO: We should have target("dx.Padding", 2) padding after %B, but we don't37// correctly handle 2- and 3-element vectors inside structs yet because of38// DataLayout rules. See https://github.com/llvm/llvm-project/issues/123968.39//40// CHECK-SAME: %B,41 42// CHECK-SAME:   %C, target("dx.Padding", 8),43// CHECK-SAME:   <{ [4 x <{ %A, target("dx.Padding", 8) }>], %A }>, target("dx.Padding", 8),44// CHECK-SAME:   %__cblayout_D, half,45// CHECK-SAME:   <3 x i16>46// CHECK-SAME: }>47 48// CHECK: %A = type <{ <2 x float> }>49// CHECK: %B = type <{ <2 x float>, <3 x i16> }>50// CHECK: %C = type <{ i32, target("dx.Padding", 12), %A }>51 52// CHECK: %__cblayout_D = type <{53// CHECK-SAME:   <{ [1 x <{54// CHECK-SAME:     <{ [2 x <{ %B, target("dx.Padding", 2) }>], %B }>, target("dx.Padding", 2)55// CHECK-SAME:   }>],56// CHECK-SAME:   <{ [2 x <{ %B, target("dx.Padding", 2) }>], %B }> }>57// CHECK-SAME: }>58 59// CHECK: %__cblayout_CBClasses = type <{60// CHECK-SAME:   %K, target("dx.Padding", 12),61// CHECK-SAME:   %L, target("dx.Padding", 8),62// CHECK-SAME:   %M, target("dx.Padding", 12),63// CHECK-SAME:   <{ [9 x <{ %K, target("dx.Padding", 12) }>], %K }>64// CHECK-SAME: }>65 66// CHECK: %K = type <{ float }>67// CHECK: %L = type <{ float, float }>68// CHECK: %M = type <{ <{ [4 x <{ %K, target("dx.Padding", 12) }>], %K }> }>69 70// CHECK: %__cblayout_CBMix = type <{71// CHECK-SAME:   <{ [1 x <{ %Test, target("dx.Padding", 8) }>], %Test }>, float, target("dx.Padding", 4)72// CHECK-SAME:   <{ [2 x <{73// CHECK-SAME:     <{ [1 x <{ <2 x float>, target("dx.Padding", 8) }>], <2 x float> }>, target("dx.Padding", 8) }>],74// CHECK-SAME:     <{ [1 x <{ <2 x float>, target("dx.Padding", 8) }>], <2 x float> }>75// CHECK-SAME:   }>, float, target("dx.Padding", 4),76// CHECK-SAME:   %anon, target("dx.Padding", 4), double,77// CHECK-SAME:   %anon.0, float, target("dx.Padding", 4),78// CHECK-SAME:   <1 x double>, i1679// CHECK-SAME: }>80 81// CHECK: %Test = type <{ float, float }>82// CHECK: %anon = type <{ float }>83// CHECK: %anon.0 = type <{ <2 x i32> }>84 85// CHECK: %__cblayout_CB_A = type <{86// CHECK-SAME:   <{ [1 x <{ double, target("dx.Padding", 8) }>], double }>, target("dx.Padding", 8),87// CHECK-SAME:   <{ [2 x <{ <3 x float>, target("dx.Padding", 4) }>], <3 x float> }>, float,88// CHECK-SAME:   <{ [2 x <{ double, target("dx.Padding", 8) }>], double }>, half, target("dx.Padding", 6),89// CHECK-SAME:   [1 x <2 x double>],90// CHECK-SAME:   float, target("dx.Padding", 12),91// CHECK-SAME:   <{ [1 x <{ <3 x half>, target("dx.Padding", 10) }>], <3 x half> }>, <3 x half>92// CHECK-SAME: }>93 94// CHECK: %__cblayout_CB_B = type <{95// CHECK-SAME: <{ [2 x <{ <3 x double>, target("dx.Padding", 8) }>], <3 x double> }>, <3 x half>96// CHECK-SAME: }>97 98// CHECK: %__cblayout_CB_C = type <{99// CHECK-SAME:   i32, target("dx.Padding", 12),100// CHECK-SAME:   %F,101// CHECK-SAME:   half, target("dx.Padding", 14),102// CHECK-SAME:   %G, target("dx.Padding", 6), double103// CHECK-SAME: }>104 105// CHECK: %F = type <{106// CHECK-SAME:   double, target("dx.Padding", 8),107// CHECK-SAME:   <3 x float>, float,108// CHECK-SAME:   <3 x double>, half, target("dx.Padding", 6),109// CHECK-SAME:   <2 x double>,110// CHECK-SAME:   float, <3 x half>, <3 x half>111// CHECK-SAME: }>112 113// CHECK: %G = type <{114// CHECK-SAME:   %E, target("dx.Padding", 12),115// CHECK-SAME:   [1 x float], target("dx.Padding", 12),116// CHECK-SAME:   [2 x %F],117// CHECK-SAME:   half118// CHECK-SAME: }>119 120// CHECK: %E = type <{ float, target("dx.Padding", 4), double, float, half, i16, i64, i32 }>121 122cbuffer CBScalars : register(b1, space5) {123  float a1;124  double a2;125  float16_t a3;126  uint64_t a4;127  int a5;128  uint16_t a6;129  bool a7;130  int64_t a8;131}132 133// CHECK: @CBScalars.cb = global target("dx.CBuffer", %__cblayout_CBScalars)134// CHECK: @a1 = external hidden addrspace(2) global float, align 4135// CHECK: @a2 = external hidden addrspace(2) global double, align 8136// CHECK: @a3 = external hidden addrspace(2) global half, align 2137// CHECK: @a4 = external hidden addrspace(2) global i64, align 8138// CHECK: @a5 = external hidden addrspace(2) global i32, align 4139// CHECK: @a6 = external hidden addrspace(2) global i16, align 2140// CHECK: @a7 = external hidden addrspace(2) global i32, align 4141// CHECK: @a8 = external hidden addrspace(2) global i64, align 8142// CHECK: @CBScalars.str = private unnamed_addr constant [10 x i8] c"CBScalars\00", align 1143 144cbuffer CBVectors {145  float3 b1;146  double3 b2;147  float16_t2 b3;148  uint64_t3 b4;149  int4 b5;150  uint16_t3 b6;151  int64_t3 b7;152  // FIXME: add a bool vectors after llvm-project/llvm#91639 is added153}154 155// CHECK: @CBVectors.cb = global target("dx.CBuffer", %__cblayout_CBVectors)156// CHECK: @b1 = external hidden addrspace(2) global <3 x float>, align 16157// CHECK: @b2 = external hidden addrspace(2) global <3 x double>, align 32158// CHECK: @b3 = external hidden addrspace(2) global <2 x half>, align 4159// CHECK: @b4 = external hidden addrspace(2) global <3 x i64>, align 32160// CHECK: @b5 = external hidden addrspace(2) global <4 x i32>, align 16161// CHECK: @b6 = external hidden addrspace(2) global <3 x i16>, align 8162// CHECK: @b7 = external hidden addrspace(2) global <3 x i64>, align 32163// CHECK: @CBVectors.str = private unnamed_addr constant [10 x i8] c"CBVectors\00", align 1164 165cbuffer CBArrays : register(b2) {166  float c1[3];167  double3 c2[2];168  float16_t c3[2][2];169  uint64_t c4[3];170  int4 c5[2][3][4];171  uint16_t c6[1];172  int64_t c7[2];173  bool c8[4];174}175 176// CHECK: @CBArrays.cb = global target("dx.CBuffer", %__cblayout_CBArrays)177// CHECK: @c1 = external hidden addrspace(2) global <{ [2 x <{ float, target("dx.Padding", 12) }>], float }>, align 4178// CHECK: @c2 = external hidden addrspace(2) global <{ [1 x <{ <3 x double>, target("dx.Padding", 8) }>], <3 x double> }>, align 32179// CHECK: @c3 = external hidden addrspace(2) global <{ [1 x <{ <{ [1 x <{ half, target("dx.Padding", 14) }>], half }>, target("dx.Padding", 14) }>], <{ [1 x <{ half, target("dx.Padding", 14) }>], half }> }>, align 2180// CHECK: @c4 = external hidden addrspace(2) global <{ [2 x <{ i64, target("dx.Padding", 8) }>], i64 }>, align 8181// CHECK: @c5 = external hidden addrspace(2) global [2 x [3 x [4 x <4 x i32>]]], align 16182// CHECK: @c6 = external hidden addrspace(2) global [1 x i16], align 2183// CHECK: @c7 = external hidden addrspace(2) global <{ [1 x <{ i64, target("dx.Padding", 8) }>], i64 }>, align 8184// CHECK: @c8 = external hidden addrspace(2) global <{ [3 x <{ i32, target("dx.Padding", 12) }>], i32 }>, align 4185// CHECK: @CBArrays.str = private unnamed_addr constant [9 x i8] c"CBArrays\00", align 1186 187typedef uint32_t4 uint32_t8[2];188typedef uint4 T1;189typedef T1 T2[2]; // check a double typedef190 191cbuffer CBTypedefArray : register(space2) {192  uint32_t8 t1[2];193  T2 t2[2];194}195 196// CHECK: @CBTypedefArray.cb = global target("dx.CBuffer", %__cblayout_CBTypedefArray)197// CHECK: @t1 = external hidden addrspace(2) global [2 x [2 x <4 x i32>]], align 16198// CHECK: @t2 = external hidden addrspace(2) global [2 x [2 x <4 x i32>]], align 16199// CHECK: @CBTypedefArray.str = private unnamed_addr constant [15 x i8] c"CBTypedefArray\00", align 1200struct Empty {};201 202struct A {203  float2 f1;204};205 206struct B : A {207  uint16_t3 f2;208};209 210struct C {211  int i;212  A f3;213};214 215struct D {216  B array_of_B[2][3];217  Empty es;218};219 220// CHECK: @CBStructs.cb = global target("dx.CBuffer", %__cblayout_CBStructs)221// CHECK: @a = external hidden addrspace(2) global %A, align 1222// CHECK: @b = external hidden addrspace(2) global %B, align 1223// CHECK: @c = external hidden addrspace(2) global %C, align 1224// CHECK: @array_of_A = external hidden addrspace(2) global <{ [4 x <{ %A, target("dx.Padding", 8) }>], %A }>, align 1225// CHECK: @d = external hidden addrspace(2) global %__cblayout_D, align 1226// CHECK: @e = external hidden addrspace(2) global half, align 2227// CHECK: @f = external hidden addrspace(2) global <3 x i16>, align 8228// CHECK: @CBStructs.str = private unnamed_addr constant [10 x i8] c"CBStructs\00", align 1229 230cbuffer CBStructs {231  A a;232  B b;233  C c;234  A array_of_A[5];235  D d;236  half e;237  uint16_t3 f;238};239 240 241class K {242  float i;243};244 245class L : K {246  float j;247};248 249class M {250  K array[5];251};252 253cbuffer CBClasses {254  K k;255  L l;256  M m;257  K ka[10];258};259 260// CHECK: @CBClasses.cb = global target("dx.CBuffer", %__cblayout_CBClasses)261// CHECK: @k = external hidden addrspace(2) global %K, align 1262// CHECK: @l = external hidden addrspace(2) global %L, align 1263// CHECK: @m = external hidden addrspace(2) global %M, align 1264// CHECK: @ka = external hidden addrspace(2) global <{ [9 x <{ %K, target("dx.Padding", 12) }>], %K }>, align 1265// CHECK: @CBClasses.str = private unnamed_addr constant [10 x i8] c"CBClasses\00", align 1266 267struct Test {268    float a, b;269};270 271// CHECK: @CBMix.cb = global target("dx.CBuffer", %__cblayout_CBMix)272// CHECK: @test = external hidden addrspace(2) global <{ [1 x <{ %Test, target("dx.Padding", 8) }>], %Test }>, align 1273// CHECK: @f1 = external hidden addrspace(2) global float, align 4274// CHECK: @f2 = external hidden addrspace(2) global <{ [2 x <{ <{ [1 x <{ <2 x float>, target("dx.Padding", 8) }>], <2 x float> }>, target("dx.Padding", 8) }>], <{ [1 x <{ <2 x float>, target("dx.Padding", 8) }>], <2 x float> }> }>, align 8275// CHECK: @f3 = external hidden addrspace(2) global float, align 4276// CHECK: @f4 = external hidden addrspace(2) global %anon, align 1277// CHECK: @f5 = external hidden addrspace(2) global double, align 8278// CHECK: @f6 = external hidden addrspace(2) global %anon.0, align 1279// CHECK: @f7 = external hidden addrspace(2) global float, align 4280// CHECK: @f8 = external hidden addrspace(2) global <1 x double>, align 8281// CHECK: @f9 = external hidden addrspace(2) global i16, align 2282// CHECK: @CBMix.str = private unnamed_addr constant [6 x i8] c"CBMix\00", align 1283 284cbuffer CBMix {285    Test test[2];286    float f1;287    float2 f2[3][2];288    float f3;289    struct { float c; } f4;290    double f5;291    struct { int2 i; } f6;292    float f7;293    vector<double,1> f8;294    uint16_t f9;295};296 297// CHECK: @CB_A.cb = global target("dx.CBuffer", %__cblayout_CB_A)298 299cbuffer CB_A {300  double B0[2];301  float3 B1[3];302  float B2;303  double B3[3];304  half B4;305  double2 B5[1];306  float B6;307  half3 B7[2];308  half3 B8;309}310 311// CHECK: @CB_B.cb = global target("dx.CBuffer", %__cblayout_CB_B)312cbuffer CB_B {313  double3 B9[3];314  half3 B10;315}316 317struct E {318  float A0;319  double A1;320  float A2;321  half A3;322  int16_t A4;323  int64_t A5;324  int A6;325};326 327struct F {328  double B0;329  float3 B1;330  float B2;331  double3 B3;332  half B4;333  double2 B5;334  float B6;335  half3 B7;336  half3 B8;337};338 339struct G {340  E C0;341  float C1[1];342  F C2[2];343  half C3;344};345 346// CHECK: @CB_C.cb = global target("dx.CBuffer", %__cblayout_CB_C)347cbuffer CB_C {348  int D0;349  F D1;350  half D2;351  G D3;352  double D4;353}354 355// CHECK: define internal void @_init_buffer_CBScalars.cb()356// CHECK-NEXT: entry:357// CHECK-NEXT: %CBScalars.cb_h = call target("dx.CBuffer", %__cblayout_CBScalars)358// CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.CBuffer_s___cblayout_CBScalarsst(i32 5, i32 1, i32 1, i32 0, ptr @CBScalars.str)359// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CBScalars) %CBScalars.cb_h, ptr @CBScalars.cb, align 4360 361// CHECK: define internal void @_init_buffer_CBVectors.cb()362// CHECK-NEXT: entry:363// CHECK-NEXT: %CBVectors.cb_h = call target("dx.CBuffer", %__cblayout_CBVectors)364// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CBVectorsst(i32 0, i32 0, i32 1, i32 0, ptr @CBVectors.str)365// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CBVectors) %CBVectors.cb_h, ptr @CBVectors.cb, align 4366 367// CHECK: define internal void @_init_buffer_CBArrays.cb()368// CHECK-NEXT: entry:369// CHECK-NEXT: %CBArrays.cb_h = call target("dx.CBuffer", %__cblayout_CBArrays)370// CHECK-SAME: @llvm.dx.resource.handlefrombinding.tdx.CBuffer_s___cblayout_CBArraysst(i32 0, i32 2, i32 1, i32 0, ptr @CBArrays.str)371// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CBArrays) %CBArrays.cb_h, ptr @CBArrays.cb, align 4372 373// CHECK: define internal void @_init_buffer_CBTypedefArray.cb()374// CHECK-NEXT: entry:375// CHECK-NEXT: %CBTypedefArray.cb_h = call target("dx.CBuffer", %__cblayout_CBTypedefArray)376// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CBTypedefArrayst(i32 1, i32 2, i32 1, i32 0, ptr @CBTypedefArray.str)377// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CBTypedefArray) %CBTypedefArray.cb_h, ptr @CBTypedefArray.cb, align 4378 379// CHECK: define internal void @_init_buffer_CBStructs.cb()380// CHECK-NEXT: entry:381// CHECK-NEXT:   %CBStructs.cb_h = call target("dx.CBuffer", %__cblayout_CBStructs)382// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CBStructsst(i32 2, i32 0, i32 1, i32 0, ptr @CBStructs.str)383// CHECK-NEXT:   store target("dx.CBuffer", %__cblayout_CBStructs) %CBStructs.cb_h, ptr @CBStructs.cb, align 4384 385// CHECK: define internal void @_init_buffer_CBClasses.cb()386// CHECK-NEXT: entry:387// CHECK-NEXT: %CBClasses.cb_h = call target("dx.CBuffer", %__cblayout_CBClasses)388// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CBClassesst(i32 3, i32 0, i32 1, i32 0, ptr @CBClasses.str)389// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CBClasses) %CBClasses.cb_h, ptr @CBClasses.cb, align 4390 391// CHECK: define internal void @_init_buffer_CBMix.cb()392// CHECK-NEXT: entry:393// CHECK-NEXT: %CBMix.cb_h = call target("dx.CBuffer", %__cblayout_CBMix)394// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CBMixst(i32 4, i32 0, i32 1, i32 0, ptr @CBMix.str)395// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CBMix) %CBMix.cb_h, ptr @CBMix.cb, align 4396 397// CHECK: define internal void @_init_buffer_CB_A.cb()398// CHECK-NEXT: entry:399// CHECK-NEXT: %CB_A.cb_h = call target("dx.CBuffer", %__cblayout_CB_A)400// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CB_Ast(i32 5, i32 0, i32 1, i32 0, ptr @CB_A.str)401// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CB_A) %CB_A.cb_h, ptr @CB_A.cb, align 4402 403// CHECK: define internal void @_init_buffer_CB_B.cb()404// CHECK-NEXT: entry:405// CHECK-NEXT: %CB_B.cb_h = call target("dx.CBuffer", %__cblayout_CB_B)406// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CB_Bst(i32 6, i32 0, i32 1, i32 0, ptr @CB_B.str)407// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CB_B) %CB_B.cb_h, ptr @CB_B.cb, align 4408 409// CHECK: define internal void @_init_buffer_CB_C.cb()410// CHECK-NEXT: entry:411// CHECK-NEXT: %CB_C.cb_h = call target("dx.CBuffer", %__cblayout_CB_C)412// CHECK-SAME: @llvm.dx.resource.handlefromimplicitbinding.tdx.CBuffer_s___cblayout_CB_Cst(i32 7, i32 0, i32 1, i32 0, ptr @CB_C.str)413// CHECK-NEXT: store target("dx.CBuffer", %__cblayout_CB_C) %CB_C.cb_h, ptr @CB_C.cb, align 4414 415RWBuffer<float> Buf;416 417[numthreads(4,1,1)]418void main() {419  Buf[0] = a1 + b1.z + c1[2] + a.f1.y + f1 + B1[0].x + ka[2].i + B10.z + D1.B2;420}421 422// CHECK: define internal void @_GLOBAL__sub_I_cbuffer.hlsl()423// CHECK-NEXT: entry:424// CHECK-NEXT: call void @_init_buffer_CBScalars.cb()425// CHECK-NEXT: call void @_init_buffer_CBVectors.cb()426// CHECK-NEXT: call void @_init_buffer_CBArrays.cb()427// CHECK-NEXT: call void @_init_buffer_CBTypedefArray.cb()428// CHECK-NEXT: call void @_init_buffer_CBStructs.cb()429// CHECK-NEXT: call void @_init_buffer_CBClasses.cb()430// CHECK-NEXT: call void @_init_buffer_CBMix.cb()431// CHECK-NEXT: call void @_init_buffer_CB_A.cb()432 433// CHECK: !hlsl.cbs = !{![[CBSCALARS:[0-9]+]], ![[CBVECTORS:[0-9]+]], ![[CBARRAYS:[0-9]+]], ![[CBTYPEDEFARRAY:[0-9]+]], ![[CBSTRUCTS:[0-9]+]], ![[CBCLASSES:[0-9]+]],434// CHECK-SAME: ![[CBMIX:[0-9]+]], ![[CB_A:[0-9]+]], ![[CB_B:[0-9]+]], ![[CB_C:[0-9]+]]}435 436// CHECK: ![[CBSCALARS]] = !{ptr @CBScalars.cb, ptr addrspace(2) @a1, ptr addrspace(2) @a2, ptr addrspace(2) @a3, ptr addrspace(2) @a4,437// CHECK-SAME: ptr addrspace(2) @a5, ptr addrspace(2) @a6, ptr addrspace(2) @a7, ptr addrspace(2) @a8}438 439// CHECK: ![[CBVECTORS]] = !{ptr @CBVectors.cb, ptr addrspace(2) @b1, ptr addrspace(2) @b2, ptr addrspace(2) @b3, ptr addrspace(2) @b4,440// CHECK-SAME: ptr addrspace(2) @b5, ptr addrspace(2) @b6, ptr addrspace(2) @b7}441 442// CHECK: ![[CBARRAYS]] = !{ptr @CBArrays.cb, ptr addrspace(2) @c1, ptr addrspace(2) @c2, ptr addrspace(2) @c3, ptr addrspace(2) @c4,443// CHECK-SAME: ptr addrspace(2) @c5, ptr addrspace(2) @c6, ptr addrspace(2) @c7, ptr addrspace(2) @c8}444 445// CHECK: ![[CBTYPEDEFARRAY]] = !{ptr @CBTypedefArray.cb, ptr addrspace(2) @t1, ptr addrspace(2) @t2}446 447// CHECK: ![[CBSTRUCTS]] = !{ptr @CBStructs.cb, ptr addrspace(2) @a, ptr addrspace(2) @b, ptr addrspace(2) @c, ptr addrspace(2) @array_of_A,448// CHECK-SAME: ptr addrspace(2) @d, ptr addrspace(2) @e, ptr addrspace(2) @f}449 450// CHECK: ![[CBCLASSES]] = !{ptr @CBClasses.cb, ptr addrspace(2) @k, ptr addrspace(2) @l, ptr addrspace(2) @m, ptr addrspace(2) @ka}451 452// CHECK: ![[CBMIX]] = !{ptr @CBMix.cb, ptr addrspace(2) @test, ptr addrspace(2) @f1, ptr addrspace(2) @f2, ptr addrspace(2) @f3,453// CHECK-SAME: ptr addrspace(2) @f4, ptr addrspace(2) @f5, ptr addrspace(2) @f6, ptr addrspace(2) @f7, ptr addrspace(2) @f8, ptr addrspace(2) @f9}454 455// CHECK: ![[CB_A]] = !{ptr @CB_A.cb, ptr addrspace(2) @B0, ptr addrspace(2) @B1, ptr addrspace(2) @B2, ptr addrspace(2) @B3, ptr addrspace(2) @B4,456// CHECK-SAME: ptr addrspace(2) @B5, ptr addrspace(2) @B6, ptr addrspace(2) @B7, ptr addrspace(2) @B8}457 458// CHECK: ![[CB_B]] = !{ptr @CB_B.cb, ptr addrspace(2) @B9, ptr addrspace(2) @B10}459 460// CHECK: ![[CB_C]] = !{ptr @CB_C.cb, ptr addrspace(2) @D0, ptr addrspace(2) @D1, ptr addrspace(2) @D2, ptr addrspace(2) @D3, ptr addrspace(2) @D4}461