1// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -emit-llvm -o - | FileCheck %s 2// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-vulkan-library %s -fnative-half-type -emit-llvm -o - | FileCheck %s 3 4// CHECK: define {{.*}} i32 {{.*}}test_branch{{.*}}(i32 {{.*}} [[VALD:%.*]]) 5// CHECK: [[PARAM:%.*]] = load i32, ptr [[VALD]].addr, align 4 6// CHECK: [[CMP:%.*]] = icmp sgt i32 [[PARAM]], 0 7// CHECK: br i1 [[CMP]], label %if.then, label %if.else, !hlsl.controlflow.hint [[HINT_BRANCH:![0-9]+]] 8export int test_branch(int X){ 9 int resp; 10 [branch] if (X > 0) { 11 resp = -X; 12 } else { 13 resp = X * 2; 14 } 15 16 return resp; 17} 18 19// CHECK: define {{.*}} i32 {{.*}}test_flatten{{.*}}(i32 {{.*}} [[VALD:%.*]]) 20// CHECK: [[PARAM:%.*]] = load i32, ptr [[VALD]].addr, align 4 21// CHECK: [[CMP:%.*]] = icmp sgt i32 [[PARAM]], 0 22// CHECK: br i1 [[CMP]], label %if.then, label %if.else, !hlsl.controlflow.hint [[HINT_FLATTEN:![0-9]+]] 23export int test_flatten(int X){ 24 int resp; 25 [flatten] if (X > 0) { 26 resp = -X; 27 } else { 28 resp = X * 2; 29 } 30 31 return resp; 32} 33 34// CHECK: define {{.*}} i32 {{.*}}test_no_attr{{.*}}(i32 {{.*}} [[VALD:%.*]]) 35// CHECK-NOT: !hlsl.controlflow.hint 36export int test_no_attr(int X){ 37 int resp; 38 if (X > 0) { 39 resp = -X; 40 } else { 41 resp = X * 2; 42 } 43 44 return resp; 45} 46 47//CHECK: [[HINT_BRANCH]] = !{!"hlsl.controlflow.hint", i32 1} 48//CHECK: [[HINT_FLATTEN]] = !{!"hlsl.controlflow.hint", i32 2} 49