1 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static < %s | FileCheck %s -check-prefix=ci 2 3 @i = global i32 0, align 4 4 @j = common global i32 0, align 4 5 @k = common global i32 0, align 4 6 7 ; Function Attrs: nounwind optsize 8 define i32 @x0() #0 { 9 entry: 10 %0 = load i32* @i, align 4, !tbaa !1 11 %cmp = icmp eq i32 %0, 0 12 br i1 %cmp, label %if.then, label %if.else 13 14 if.then: ; preds = %entry 15 tail call void asm sideeffect ".space 1000", ""() #1, !srcloc !5 16 br label %if.end 17 18 if.else: ; preds = %entry 19 tail call void asm sideeffect ".space 1004", ""() #1, !srcloc !6 20 br label %if.end 21 22 if.end: ; preds = %if.else, %if.then 23 %storemerge = phi i32 [ 1, %if.else ], [ 0, %if.then ] 24 store i32 %storemerge, i32* @i, align 4, !tbaa !1 25 ret i32 0 26 } 27 28 ; ci: .ent x0 29 ; ci: beqz $3, $BB0_2 30 ; ci: $BB0_2: 31 ; ci: .end x0 32 33 ; Function Attrs: nounwind optsize 34 define i32 @x1() #0 { 35 entry: 36 %0 = load i32* @i, align 4, !tbaa !1 37 %cmp = icmp eq i32 %0, 0 38 br i1 %cmp, label %if.then, label %if.else 39 40 if.then: ; preds = %entry 41 tail call void asm sideeffect ".space 1000000", ""() #1, !srcloc !7 42 br label %if.end 43 44 if.else: ; preds = %entry 45 tail call void asm sideeffect ".space 1000004", ""() #1, !srcloc !8 46 br label %if.end 47 48 if.end: ; preds = %if.else, %if.then 49 %storemerge = phi i32 [ 1, %if.else ], [ 0, %if.then ] 50 store i32 %storemerge, i32* @i, align 4, !tbaa !1 51 ret i32 0 52 } 53 54 ; ci: .ent x1 55 ; ci: bnez $3, $BB1_1 # 16 bit inst 56 ; ci: jal $BB1_2 # branch 57 ; ci: nop 58 ; ci: $BB1_1: 59 ; ci: .end x1 60 61 ; Function Attrs: nounwind optsize 62 define i32 @y0() #0 { 63 entry: 64 %0 = load i32* @i, align 4, !tbaa !1 65 %cmp = icmp eq i32 %0, 0 66 br i1 %cmp, label %if.then, label %if.else 67 68 if.then: ; preds = %entry 69 store i32 10, i32* @j, align 4, !tbaa !1 70 tail call void asm sideeffect ".space 1000", ""() #1, !srcloc !9 71 br label %if.end 72 73 if.else: ; preds = %entry 74 store i32 55, i32* @j, align 4, !tbaa !1 75 tail call void asm sideeffect ".space 1004", ""() #1, !srcloc !10 76 br label %if.end 77 78 if.end: ; preds = %if.else, %if.then 79 ret i32 0 80 } 81 82 ; ci: .ent y0 83 ; ci: beqz $2, $BB2_2 84 ; ci: .end y0 85 86 ; Function Attrs: nounwind optsize 87 define i32 @y1() #0 { 88 entry: 89 %0 = load i32* @i, align 4, !tbaa !1 90 %cmp = icmp eq i32 %0, 0 91 br i1 %cmp, label %if.then, label %if.else 92 93 if.then: ; preds = %entry 94 store i32 10, i32* @j, align 4, !tbaa !1 95 tail call void asm sideeffect ".space 1000000", ""() #1, !srcloc !11 96 br label %if.end 97 98 if.else: ; preds = %entry 99 store i32 55, i32* @j, align 4, !tbaa !1 100 tail call void asm sideeffect ".space 1000004", ""() #1, !srcloc !12 101 br label %if.end 102 103 if.end: ; preds = %if.else, %if.then 104 ret i32 0 105 } 106 107 ; ci: .ent y1 108 ; ci: bnez $2, $BB3_1 # 16 bit inst 109 ; ci: jal $BB3_2 # branch 110 ; ci: nop 111 ; ci: $BB3_1: 112 ; ci: .end y1 113 114 ; Function Attrs: nounwind optsize 115 define void @z0() #0 { 116 entry: 117 %0 = load i32* @i, align 4, !tbaa !1 118 %1 = load i32* @j, align 4, !tbaa !1 119 %cmp = icmp eq i32 %0, %1 120 br i1 %cmp, label %if.then, label %if.else 121 122 if.then: ; preds = %entry 123 store i32 1, i32* @k, align 4, !tbaa !1 124 tail call void asm sideeffect ".space 10000", ""() #1, !srcloc !13 125 br label %if.end 126 127 if.else: ; preds = %entry 128 tail call void asm sideeffect ".space 10004", ""() #1, !srcloc !14 129 store i32 2, i32* @k, align 4, !tbaa !1 130 br label %if.end 131 132 if.end: ; preds = %if.else, %if.then 133 ret void 134 } 135 136 ; ci: .ent z0 137 ; ci: btnez $BB4_2 138 ; ci: .end z0 139 140 ; Function Attrs: nounwind optsize 141 define void @z1() #0 { 142 entry: 143 %0 = load i32* @i, align 4, !tbaa !1 144 %1 = load i32* @j, align 4, !tbaa !1 145 %cmp = icmp eq i32 %0, %1 146 br i1 %cmp, label %if.then, label %if.else 147 148 if.then: ; preds = %entry 149 store i32 1, i32* @k, align 4, !tbaa !1 150 tail call void asm sideeffect ".space 10000000", ""() #1, !srcloc !15 151 br label %if.end 152 153 if.else: ; preds = %entry 154 tail call void asm sideeffect ".space 10000004", ""() #1, !srcloc !16 155 store i32 2, i32* @k, align 4, !tbaa !1 156 br label %if.end 157 158 if.end: ; preds = %if.else, %if.then 159 ret void 160 } 161 162 ; ci: .ent z1 163 ; ci: bteqz $BB5_1 # 16 bit inst 164 ; ci: jal $BB5_2 # branch 165 ; ci: nop 166 ; ci: $BB5_1: 167 ; ci: .end z1 168 169 ; Function Attrs: nounwind optsize 170 define void @z3() #0 { 171 entry: 172 %0 = load i32* @i, align 4, !tbaa !1 173 %1 = load i32* @j, align 4, !tbaa !1 174 %cmp1 = icmp sgt i32 %0, %1 175 br i1 %cmp1, label %if.then, label %if.end 176 177 if.then: ; preds = %entry, %if.then 178 tail call void asm sideeffect ".space 10000", ""() #1, !srcloc !17 179 %2 = load i32* @i, align 4, !tbaa !1 180 %3 = load i32* @j, align 4, !tbaa !1 181 %cmp = icmp sgt i32 %2, %3 182 br i1 %cmp, label %if.then, label %if.end 183 184 if.end: ; preds = %if.then, %entry 185 ret void 186 } 187 188 ; ci: .ent z3 189 ; ci: bteqz $BB6_2 190 ; ci: .end z3 191 192 ; Function Attrs: nounwind optsize 193 define void @z4() #0 { 194 entry: 195 %0 = load i32* @i, align 4, !tbaa !1 196 %1 = load i32* @j, align 4, !tbaa !1 197 %cmp1 = icmp sgt i32 %0, %1 198 br i1 %cmp1, label %if.then, label %if.end 199 200 if.then: ; preds = %entry, %if.then 201 tail call void asm sideeffect ".space 10000000", ""() #1, !srcloc !18 202 %2 = load i32* @i, align 4, !tbaa !1 203 %3 = load i32* @j, align 4, !tbaa !1 204 %cmp = icmp sgt i32 %2, %3 205 br i1 %cmp, label %if.then, label %if.end 206 207 if.end: ; preds = %if.then, %entry 208 ret void 209 } 210 211 ; ci: .ent z4 212 ; ci: btnez $BB7_1 # 16 bit inst 213 ; ci: jal $BB7_2 # branch 214 ; ci: nop 215 ; ci: .align 2 216 ; ci: $BB7_1: 217 ; ci: .end z4 218 219 attributes #0 = { nounwind optsize "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 220 attributes #1 = { nounwind } 221 222 223 !1 = metadata !{metadata !2, metadata !2, i64 0} 224 !2 = metadata !{metadata !"int", metadata !3, i64 0} 225 !3 = metadata !{metadata !"omnipotent char", metadata !4, i64 0} 226 !4 = metadata !{metadata !"Simple C/C++ TBAA"} 227 !5 = metadata !{i32 57} 228 !6 = metadata !{i32 107} 229 !7 = metadata !{i32 188} 230 !8 = metadata !{i32 241} 231 !9 = metadata !{i32 338} 232 !10 = metadata !{i32 391} 233 !11 = metadata !{i32 477} 234 !12 = metadata !{i32 533} 235 !13 = metadata !{i32 621} 236 !14 = metadata !{i32 663} 237 !15 = metadata !{i32 747} 238 !16 = metadata !{i32 792} 239 !17 = metadata !{i32 867} 240 !18 = metadata !{i32 953} 241