xref: /aosp_15_r20/external/clang/test/CodeGen/forwarding-blocks-if.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
2*67e74705SXin Li // Check that no empty blocks are generated for nested ifs.
3*67e74705SXin Li 
4*67e74705SXin Li extern void func();
5*67e74705SXin Li 
f0(int val)6*67e74705SXin Li int f0(int val) {
7*67e74705SXin Li   if (val == 0) {
8*67e74705SXin Li     func();
9*67e74705SXin Li   } else if (val == 1) {
10*67e74705SXin Li     func();
11*67e74705SXin Li   }
12*67e74705SXin Li   return 0;
13*67e74705SXin Li }
14*67e74705SXin Li 
15*67e74705SXin Li // CHECK-LABEL: define {{.*}}i32 @f0
16*67e74705SXin Li // CHECK: call void {{.*}} @func
17*67e74705SXin Li // CHECK: call void {{.*}} @func
18*67e74705SXin Li // CHECK: br label %[[RETBLOCK1:[^ ]*]]
19*67e74705SXin Li // CHECK: [[RETBLOCK1]]:
20*67e74705SXin Li // CHECK-NOT: br label
21*67e74705SXin Li // CHECK: ret i32
22*67e74705SXin Li 
f1(int val,int g)23*67e74705SXin Li int f1(int val, int g) {
24*67e74705SXin Li   if (val == 0)
25*67e74705SXin Li     if (g == 1) {
26*67e74705SXin Li       func();
27*67e74705SXin Li     }
28*67e74705SXin Li   return 0;
29*67e74705SXin Li }
30*67e74705SXin Li 
31*67e74705SXin Li // CHECK-LABEL: define {{.*}}i32 @f1
32*67e74705SXin Li // CHECK: call void {{.*}} @func
33*67e74705SXin Li // CHECK: br label %[[RETBLOCK2:[^ ]*]]
34*67e74705SXin Li // CHECK: [[RETBLOCK2]]:
35*67e74705SXin Li // CHECK-NOT: br label
36*67e74705SXin Li // CHECK: ret i32
37