[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Transforms / SimplifyCFG / ARM / switch-to-lookup-table.ll
blob463a85cfd583ddef44a640cc0ec624682d424ad4
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=static    < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
3 ; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=pic       < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
4 ; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=ropi      < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
5 ; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=rwpi      < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
6 ; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -switch-to-lookup -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
8 ; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=static    < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
9 ; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=pic       < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
10 ; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=ropi      < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
11 ; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=rwpi      < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
12 ; RUN: opt -S -passes='simplifycfg<switch-to-lookup>' -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
14 ; CHECK:       @{{.*}} = private unnamed_addr constant [3 x i32] [i32 1234, i32 5678, i32 15532]
15 ; ENABLE:      @{{.*}} = private unnamed_addr constant [3 x ptr] [ptr @c1, ptr @c2, ptr @c3]
16 ; DISABLE-NOT: @{{.*}} = private unnamed_addr constant [3 x ptr] [ptr @c1, ptr @c2, ptr @c3]
17 ; ENABLE:      @{{.*}} = private unnamed_addr constant [3 x ptr] [ptr @g1, ptr @g2, ptr @g3]
18 ; DISABLE-NOT: @{{.*}} = private unnamed_addr constant [3 x ptr] [ptr @g1, ptr @g2, ptr @g3]
19 ; ENABLE:      @{{.*}} = private unnamed_addr constant [3 x ptr] [ptr @f1, ptr @f2, ptr @f3]
20 ; DISABLE-NOT: @{{.*}} = private unnamed_addr constant [3 x ptr] [ptr @f1, ptr @f2, ptr @f3]
22 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
23 target triple = "armv7a--none-eabi"
25 define i32 @test1(i32 %n) {
26 entry:
27   switch i32 %n, label %sw.default [
28   i32 0, label %sw.bb
29   i32 1, label %sw.bb1
30   i32 2, label %sw.bb2
31   ]
33 sw.bb:
34   br label %return
36 sw.bb1:
37   br label %return
39 sw.bb2:
40   br label %return
42 sw.default:
43   br label %return
45 return:
46   %retval.0 = phi i32 [ 15498, %sw.default ], [ 15532, %sw.bb2 ], [ 5678, %sw.bb1 ], [ 1234, %sw.bb ]
47   ret i32 %retval.0
50 @c1 = external constant i32, align 4
51 @c2 = external constant i32, align 4
52 @c3 = external constant i32, align 4
53 @c4 = external constant i32, align 4
56 define ptr @test2(i32 %n) {
57 entry:
58   switch i32 %n, label %sw.default [
59   i32 0, label %sw.bb
60   i32 1, label %sw.bb1
61   i32 2, label %sw.bb2
62   ]
64 sw.bb:
65   br label %return
67 sw.bb1:
68   br label %return
70 sw.bb2:
71   br label %return
73 sw.default:
74   br label %return
76 return:
77   %retval.0 = phi ptr [ @c4, %sw.default ], [ @c3, %sw.bb2 ], [ @c2, %sw.bb1 ], [ @c1, %sw.bb ]
78   ret ptr %retval.0
81 @g1 = external global i32, align 4
82 @g2 = external global i32, align 4
83 @g3 = external global i32, align 4
84 @g4 = external global i32, align 4
86 define ptr @test3(i32 %n) {
87 entry:
88   switch i32 %n, label %sw.default [
89   i32 0, label %sw.bb
90   i32 1, label %sw.bb1
91   i32 2, label %sw.bb2
92   ]
94 sw.bb:
95   br label %return
97 sw.bb1:
98   br label %return
100 sw.bb2:
101   br label %return
103 sw.default:
104   br label %return
106 return:
107   %retval.0 = phi ptr [ @g4, %sw.default ], [ @g3, %sw.bb2 ], [ @g2, %sw.bb1 ], [ @g1, %sw.bb ]
108   ret ptr %retval.0
111 declare i32 @f1(i32, i32)
112 declare i32 @f2(i32, i32)
113 declare i32 @f3(i32, i32)
114 declare i32 @f4(i32, i32)
115 declare i32 @f5(i32, i32)
117 define i32 @test4(i32 %a, i32 %b, i32 %c) {
118 entry:
119   %cmp = icmp eq i32 %a, 1
120   br i1 %cmp, label %cond.end11, label %cond.false
122 cond.false:
123   %cmp1 = icmp eq i32 %a, 2
124   br i1 %cmp1, label %cond.end11, label %cond.false3
126 cond.false3:
127   %cmp4 = icmp eq i32 %a, 3
128   br i1 %cmp4, label %cond.end11, label %cond.false6
130 cond.false6:
131   %cmp7 = icmp eq i32 %a, 4
132   %cond = select i1 %cmp7, ptr @f4, ptr @f5
133   br label %cond.end11
135 cond.end11:
136   %cond12 = phi ptr [ @f1, %entry ], [ @f2, %cond.false ], [ %cond, %cond.false6 ], [ @f3, %cond.false3 ]
137   %call = call i32 %cond12(i32 %b, i32 %c) #2
138   ret i32 %call