
Implements https://github.com/llvm/wg-hlsl/blob/main/proposals/0026-symbol-visibility.md. The change is to stop using the `hlsl.export` attribute. Instead, symbols with "program linkage" in HLSL will have export linkage with default visibility, and symbols with "external linkage" in HLSL will have export linkage with hidden visibility.
67 lines
2.1 KiB
HLSL
67 lines
2.1 KiB
HLSL
// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-library %s \
|
|
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s
|
|
|
|
int shl32(int V, int S) {
|
|
return V << S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i32 @_Z5shl32ii(i32 noundef %V, i32 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i32 %{{.*}}, 31
|
|
// CHECK-DAG: %{{.*}} = shl i32 %{{.*}}, %[[Masked]]
|
|
|
|
int shr32(int V, int S) {
|
|
return V >> S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i32 @_Z5shr32ii(i32 noundef %V, i32 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i32 %{{.*}}, 31
|
|
// CHECK-DAG: %{{.*}} = ashr i32 %{{.*}}, %[[Masked]]
|
|
|
|
int64_t shl64(int64_t V, int64_t S) {
|
|
return V << S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i64 @_Z5shl64ll(i64 noundef %V, i64 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i64 %{{.*}}, 63
|
|
// CHECK-DAG: %{{.*}} = shl i64 %{{.*}}, %[[Masked]]
|
|
|
|
int64_t shr64(int64_t V, int64_t S) {
|
|
return V >> S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i64 @_Z5shr64ll(i64 noundef %V, i64 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i64 %{{.*}}, 63
|
|
// CHECK-DAG: %{{.*}} = ashr i64 %{{.*}}, %[[Masked]]
|
|
|
|
uint shlu32(uint V, uint S) {
|
|
return V << S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i32 @_Z6shlu32jj(i32 noundef %V, i32 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i32 %{{.*}}, 31
|
|
// CHECK-DAG: %{{.*}} = shl i32 %{{.*}}, %[[Masked]]
|
|
|
|
uint shru32(uint V, uint S) {
|
|
return V >> S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i32 @_Z6shru32jj(i32 noundef %V, i32 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i32 %{{.*}}, 31
|
|
// CHECK-DAG: %{{.*}} = lshr i32 %{{.*}}, %[[Masked]]
|
|
|
|
uint64_t shlu64(uint64_t V, uint64_t S) {
|
|
return V << S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i64 @_Z6shlu64mm(i64 noundef %V, i64 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i64 %{{.*}}, 63
|
|
// CHECK-DAG: %{{.*}} = shl i64 %{{.*}}, %[[Masked]]
|
|
|
|
uint64_t shru64(uint64_t V, uint64_t S) {
|
|
return V >> S;
|
|
}
|
|
|
|
// CHECK-LABEL: define hidden noundef i64 @_Z6shru64mm(i64 noundef %V, i64 noundef %S) #0 {
|
|
// CHECK-DAG: %[[Masked:.*]] = and i64 %{{.*}}, 63
|
|
// CHECK-DAG: %{{.*}} = lshr i64 %{{.*}}, %[[Masked]]
|