@@ -72,3 +72,45 @@ for.body: ; preds = %entry, %for.body
72
72
%exitcond.not = icmp eq i32 %inc , %n
73
73
br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
74
74
}
75
+
76
+ define i32 @static_bounded_loop (i32 %num ) {
77
+ ; CHECK-LABEL: static_bounded_loop:
78
+ ; CHECK: .p2align 4
79
+ ; CHECK-NEXT: // %bb.0: // %entry
80
+ ; CHECK-NEXT: nopb ; nopa ; nops ; movxm ls, #.LBB1_1; nopv
81
+ ; CHECK-NEXT: mova r2, #64; nopb ; movxm le, #.L_LEnd1
82
+ ; CHECK-NEXT: add.nc lc, r2, #0
83
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
84
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
85
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
86
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
87
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
88
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
89
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopx ; mov r0, r1; nopv
90
+ ; CHECK-NEXT: .p2align 4
91
+ ; CHECK-NEXT: .LBB1_1: // %for.body
92
+ ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
93
+ ; CHECK-NEXT: nopb ; nopa ; nops ; mul r0, r0, r0; nopm ; nopv
94
+ ; CHECK-NEXT: .L_LEnd1:
95
+ ; CHECK-NEXT: nopb ; nopa ; nops ; nopxm ; nopv
96
+ ; CHECK-NEXT: // %bb.2: // %for.cond.cleanup
97
+ ; CHECK-NEXT: nopa ; ret lr
98
+ ; CHECK-NEXT: nop // Delay Slot 5
99
+ ; CHECK-NEXT: nop // Delay Slot 4
100
+ ; CHECK-NEXT: nop // Delay Slot 3
101
+ ; CHECK-NEXT: nop // Delay Slot 2
102
+ ; CHECK-NEXT: nop // Delay Slot 1
103
+ entry:
104
+ br label %for.body
105
+
106
+ for.cond.cleanup: ; preds = %for.body
107
+ ret i32 %mul
108
+
109
+ for.body: ; preds = %entry, %for.body
110
+ %i.05 = phi i32 [ 0 , %entry ], [ %inc , %for.body ]
111
+ %x.04 = phi i32 [ %num , %entry ], [ %mul , %for.body ]
112
+ %mul = mul nsw i32 %x.04 , %x.04
113
+ %inc = add nuw nsw i32 %i.05 , 1
114
+ %exitcond.not = icmp eq i32 %inc , 64
115
+ br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
116
+ }
0 commit comments