Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Thumb / ragreedy-implicit-def.ll
blobaa72fb3eb6a244241c7059d27a953192322f7394
1 ; REQUIRES: asserts
2 ; RUN: llc -mtriple=thumbv6m -regalloc=greedy -stats < %s 2>&1 | FileCheck %s
4 ; Undef incoming values to phis end up creating IMPLICIT_DEF values. If we don't
5 ; prefer them to be in a register then we get fewer spilled live ranges (6
6 ; compared to 7).
7 ; CHECK: 6 regalloc - Number of spilled live ranges
9 declare i32 @otherfn(i32)
10 define void @fn(i32 %val, ptr %ptr) {
11 entry:
12   %gep2 = getelementptr i32, ptr %ptr, i32 1
13   %gep3 = getelementptr i32, ptr %ptr, i32 2
14   %gep4 = getelementptr i32, ptr %ptr, i32 3
15   %gep5 = getelementptr i32, ptr %ptr, i32 4
16   %gep6 = getelementptr i32, ptr %ptr, i32 5
17   %gep7 = getelementptr i32, ptr %ptr, i32 6
18   %gep8 = getelementptr i32, ptr %ptr, i32 7
19   %cmp1 = icmp uge i32 %val, 3
20   br i1 %cmp1, label %if, label %then
22 if:
23   %val1 = load i32, ptr %ptr, align 4
24   %val2 = load i32, ptr %gep2, align 4
25   %val3 = load i32, ptr %gep3, align 4
26   %val4 = load i32, ptr %gep4, align 4
27   %val5 = load i32, ptr %gep5, align 4
28   %val6 = load i32, ptr %gep6, align 4
29   %val7 = load i32, ptr %gep7, align 4
30   %val8 = load i32, ptr %gep8, align 4
31   br label %then
33 then:
34   %phi1a = phi i32 [ %val1, %if ], [ undef, %entry ]
35   %phi2a = phi i32 [ %val2, %if ], [ undef, %entry ]
36   %phi3a = phi i32 [ %val3, %if ], [ undef, %entry ]
37   %phi4a = phi i32 [ %val4, %if ], [ undef, %entry ]
38   %phi5a = phi i32 [ %val5, %if ], [ undef, %entry ]
39   %phi6a = phi i32 [ %val6, %if ], [ undef, %entry ]
40   %phi7a = phi i32 [ %val7, %if ], [ undef, %entry ]
41   %phi8a = phi i32 [ %val8, %if ], [ undef, %entry ]
42   %switchval = call i32 @otherfn(i32 %val)
43   switch i32 %switchval, label %default [
44     i32 0, label %case0
45     i32 1, label %case1
46     i32 5, label %case5
47     i32 6, label %case6
48     i32 7, label %case7
49     i32 8, label %case8
50   ]
52 default:
53   br label %switchend
55 case0:
56   br label %switchend
58 case1:
59   br label %switchend
61 case5:
62   br label %switchend
64 case6:
65   br label %switchend
67 case7:
68   br label %switchend
70 case8:
71   br label %switchend
73 switchend:
74   %phi1b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi1a, %case5 ], [ 1, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
75   %phi2b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi2a, %case5 ], [ 2, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
76   %phi3b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi3a, %case5 ], [ 3, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
77   %phi4b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi4a, %case5 ], [ 4, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
78   %phi5b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi5a, %case5 ], [ 5, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
79   %phi6b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi6a, %case5 ], [ 6, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
80   %phi7b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi7a, %case5 ], [ 7, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
81   %phi8b = phi i32 [ 0, %default ], [ undef, %case0 ], [ undef, %case1 ], [ %phi8a, %case5 ], [ 8, %case6 ], [ 2, %case7 ], [ 1, %case8 ]
82   %cmp2 = icmp uge i32 %val, 4
83   br i1 %cmp2, label %if2, label %end
85 if2:
86   store i32 %phi1b, ptr %ptr, align 4
87   store i32 %phi2b, ptr %gep2, align 4
88   store i32 %phi3b, ptr %gep3, align 4
89   store i32 %phi4b, ptr %gep4, align 4
90   store i32 %phi5b, ptr %gep5, align 4
91   store i32 %phi6b, ptr %gep6, align 4
92   store i32 %phi7b, ptr %gep7, align 4
93   store i32 %phi8b, ptr %gep8, align 4
94   br label %end
96 end:
97   ret void