brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · f6e54cf Raw
107 lines · plain
1; RUN: opt -S -dxil-finalize-linkage -mtriple=dxil-unknown-shadermodel6.5-compute %s | FileCheck %s2; RUN: llc %s --filetype=asm -o - | FileCheck %s --check-prefixes=CHECK-LLC3 4target triple = "dxilv1.5-pc-shadermodel6.5-compute"5 6; DXILFinalizeLinkage changes linkage of all functions that are hidden to7; internal, converts private globals to internal linkage, and converts external globals 8; with no usage to internal linkage.9 10; CHECK: @switch.table = internal unnamed_addr constant [4 x i32]11@switch.table = private unnamed_addr constant [4 x i32] [i32 1, i32 257, i32 65793, i32 16843009], align 412 13; CHECK: @private_array = internal constant [3 x float]14@private_array = private constant [3 x float] [float 1.0, float 2.0, float 3.0], align 415 16; CHECK: @private_var = internal global i3217@private_var = private global i32 1, align 418 19; Internal global should remain internal20; CHECK: @internal_var = internal global i3221@internal_var = internal global i32 1, align 422 23; External global should remain external24; CHECK: @external_var = external global i3225@external_var = external global i32, align 426 27; Hidden global should remain hidden28; CHECK: @hidden_var = hidden global i3229@hidden_var = hidden global i32 1, align 430 31; Running the whole pipeline should remove unused global variables32 33; CHECK: @aTile = internal addrspace(3) global34; CHECK-LLC-NOT: @aTile35@aTile = hidden addrspace(3) global [4 x [1 x i32]] zeroinitializer, align 436 37; CHECK: @bTile = internal addrspace(3) global38; CHECK-LLC-NOT: @bTile39@bTile = hidden addrspace(3) global [1 x [1 x i32]] zeroinitializer, align 440 41define void @anchor_function() #0 {42entry:43  %0 = load i32, ptr @switch.table, align 444  %1 = load [3 x float], ptr @private_array, align 445  %2 = load i32, ptr @private_var, align 446  %3 = load i32, ptr @internal_var, align 447  %4 = load i32, ptr @external_var, align 448  %5 = load i32, ptr @hidden_var, align 449  ret void50}51 52; CHECK-NOT: define internal void @"?f1@@YAXXZ"()53define void @"?f1@@YAXXZ"() #0 {54entry:55  ret void56}57 58; CHECK: define internal void @"?f2@@YAXXZ"()59define hidden void @"?f2@@YAXXZ"() #0 {60entry:61  ret void62}63 64; CHECK: define internal void @"?f3@@YAXXZ"()65define hidden void @"?f3@@YAXXZ"() #0 {66entry:67  ret void68}69 70; CHECK: define internal void @"?foo@@YAXXZ"()71define hidden void @"?foo@@YAXXZ"() #0 {72entry:73  call void @"?f2@@YAXXZ"() #374  ret void75}76 77; Exported function - do not change linkage78; CHECK: define void @"?bar@@YAXXZ"()79define void @"?bar@@YAXXZ"() #0 {80entry:81  call void @"?f3@@YAXXZ"() #382  ret void83}84 85; CHECK: define internal void @"?main@@YAXXZ"() #086define internal void @"?main@@YAXXZ"() #0 {87entry:88  call void @"?foo@@YAXXZ"() #289  call void @"?bar@@YAXXZ"() #290  ret void91}92 93; Entry point function - do not change linkage94; CHECK: define void @main() #195define void @main() #1 {96entry:97  call void @"?main@@YAXXZ"()98  ret void99}100 101attributes #0 = { convergent noinline nounwind optnone}102attributes #1 = { convergent "hlsl.numthreads"="4,1,1" "hlsl.shader"="compute"}103attributes #2 = { convergent }104 105; Make sure "hlsl.export" attribute is stripped by llc106; CHECK-LLC-NOT: "hlsl.export"107