1; REQUIRES: asserts 2; RUN: llc -mtriple=hexagon -stats -o /dev/null < %s 3 4%s.0 = type { ptr, ptr, ptr, i32, i32, i32, i32, ptr, ptr, ptr } 5%s.1 = type opaque 6%s.2 = type { %s.3, ptr, ptr } 7%s.3 = type { i32, i32 } 8%s.4 = type { ptr, ptr, ptr, ptr, i32, i32, i32, ptr, i32, ptr, ptr, i8, i8, i8, ptr, i32, ptr, ptr, i8, i8, i8, ptr, i32, ptr, i32, ptr, i8, %s.9, [32 x ptr], [7 x ptr], i32, ptr, i32, ptr, i32, i32, %s.11, %s.13, i8, i8, i8, ptr, ptr, ptr, i32, [12 x i8] } 9%s.5 = type { [1 x %s.6], i32, %s.7, [4 x i8] } 10%s.6 = type { [16 x i32] } 11%s.7 = type { [2 x i32] } 12%s.8 = type { ptr, ptr, i32, ptr } 13%s.9 = type { ptr, ptr, %s.7, i32, %s.10 } 14%s.10 = type { i32 } 15%s.11 = type { %s.12, i8, ptr } 16%s.12 = type { [2 x i32] } 17%s.13 = type { i32, i32 } 18%s.14 = type { ptr, ptr } 19%s.15 = type { ptr, ptr, i32 } 20%s.16 = type { %s.3, i32, ptr, ptr, ptr, i32, i32 } 21%s.17 = type { i32, ptr } 22%s.18 = type { ptr, ptr } 23 24; Function Attrs: nounwind 25define zeroext i8 @f0(ptr %a0, i32 %a1, ptr %a2) #0 { 26b0: 27 %v0 = alloca i8, align 1 28 %v1 = alloca ptr, align 4 29 %v2 = alloca i32, align 4 30 %v3 = alloca ptr, align 4 31 %v4 = alloca i32, align 4 32 %v5 = alloca i32, align 4 33 %v6 = alloca ptr 34 %v7 = alloca i32, align 4 35 %v8 = alloca i32 36 %v9 = alloca %s.4, align 32 37 store ptr %a0, ptr %v1, align 4 38 store i32 %a1, ptr %v2, align 4 39 store ptr %a2, ptr %v3, align 4 40 %v10 = load ptr, ptr %v1, align 4 41 %v11 = getelementptr inbounds %s.0, ptr %v10, i32 0, i32 3 42 %v12 = load i32, ptr %v11, align 4 43 store i32 %v12, ptr %v4, align 4 44 %v13 = load ptr, ptr %v1, align 4 45 %v14 = getelementptr inbounds %s.0, ptr %v13, i32 0, i32 6 46 %v15 = load i32, ptr %v14, align 4 47 store i32 %v15, ptr %v5, align 4 48 %v16 = load i32, ptr %v4, align 4 49 %v17 = call ptr @llvm.stacksave() 50 store ptr %v17, ptr %v6 51 %v18 = alloca %s.2, i32 %v16, align 8 52 %v19 = load ptr, ptr %v1, align 4 53 %v20 = call i32 @f1(ptr %v19) 54 %v21 = icmp ne i32 %v20, 0 55 br i1 %v21, label %b2, label %b1 56 57b1: ; preds = %b0 58 store i8 8, ptr %v0 59 store i32 1, ptr %v8 60 br label %b23 61 62b2: ; preds = %b0 63 %v22 = load ptr, ptr %v1, align 4 64 %v24 = load ptr, ptr %v22, align 4 65 %v25 = load ptr, ptr %v1, align 4 66 %v26 = getelementptr inbounds %s.0, ptr %v25, i32 0, i32 1 67 %v27 = load ptr, ptr %v26, align 4 68 %v30 = load i32, ptr %v4, align 4 69 %v31 = mul i32 16, %v30 70 %v32 = call zeroext i8 @f2(ptr %v24, ptr %v27, ptr %v18, i32 %v31) 71 %v33 = zext i8 %v32 to i32 72 %v34 = icmp ne i32 %v33, 0 73 br i1 %v34, label %b3, label %b4 74 75b3: ; preds = %b2 76 store i8 1, ptr %v0 77 store i32 1, ptr %v8 78 br label %b23 79 80b4: ; preds = %b2 81 store i32 0, ptr %v7, align 4 82 br label %b5 83 84b5: ; preds = %b21, %b4 85 %v35 = load i32, ptr %v7, align 4 86 %v36 = load i32, ptr %v4, align 4 87 %v37 = icmp ult i32 %v35, %v36 88 br i1 %v37, label %b6, label %b7 89 90b6: ; preds = %b5 91 br label %b7 92 93b7: ; preds = %b6, %b5 94 %v38 = phi i1 [ false, %b5 ], [ true, %b6 ] 95 br i1 %v38, label %b8, label %b22 96 97b8: ; preds = %b7 98 %v39 = load i32, ptr %v7, align 4 99 %v40 = getelementptr inbounds %s.2, ptr %v18, i32 %v39 100 %v41 = getelementptr inbounds %s.2, ptr %v40, i32 0, i32 1 101 %v42 = load ptr, ptr %v41, align 4 102 %v43 = icmp ne ptr %v42, null 103 br i1 %v43, label %b9, label %b17 104 105b9: ; preds = %b8 106 %v44 = load ptr, ptr %v1, align 4 107 %v46 = load ptr, ptr %v44, align 4 108 %v47 = load i32, ptr %v7, align 4 109 %v48 = getelementptr inbounds %s.2, ptr %v18, i32 %v47 110 %v49 = getelementptr inbounds %s.2, ptr %v48, i32 0, i32 1 111 %v50 = load ptr, ptr %v49, align 4 112 %v53 = load i32, ptr %v5, align 4 113 %v54 = call zeroext i8 @f2(ptr %v46, ptr %v50, ptr %v9, i32 %v53) 114 %v55 = zext i8 %v54 to i32 115 %v56 = icmp ne i32 %v55, 0 116 br i1 %v56, label %b10, label %b11 117 118b10: ; preds = %b9 119 store i8 1, ptr %v0 120 store i32 1, ptr %v8 121 br label %b23 122 123b11: ; preds = %b9 124 %v57 = getelementptr inbounds %s.4, ptr %v9, i32 0, i32 5 125 %v58 = load i32, ptr %v57, align 4 126 %v59 = icmp ne i32 %v58, 0 127 br i1 %v59, label %b12, label %b13 128 129b12: ; preds = %b11 130 br label %b14 131 132b13: ; preds = %b11 133 %v60 = load ptr, ptr %v1, align 4 134 %v62 = load ptr, ptr %v60, align 4 135 %v63 = call i32 @f3(ptr %v62) 136 br label %b14 137 138b14: ; preds = %b13, %b12 139 %v64 = phi i32 [ %v58, %b12 ], [ %v63, %b13 ] 140 %v65 = load i32, ptr %v2, align 4 141 %v66 = icmp eq i32 %v64, %v65 142 br i1 %v66, label %b15, label %b16 143 144b15: ; preds = %b14 145 %v67 = load ptr, ptr %v1, align 4 146 %v68 = load ptr, ptr %v3, align 4 147 store ptr %v67, ptr %v68, align 4 148 %v70 = load i32, ptr %v7, align 4 149 %v71 = getelementptr inbounds %s.2, ptr %v18, i32 %v70 150 %v72 = getelementptr inbounds %s.2, ptr %v71, i32 0, i32 1 151 %v73 = load ptr, ptr %v72, align 4 152 %v75 = load ptr, ptr %v3, align 4 153 %v76 = getelementptr inbounds %s.18, ptr %v75, i32 0, i32 1 154 store ptr %v73, ptr %v76, align 4 155 store i8 0, ptr %v0 156 store i32 1, ptr %v8 157 br label %b23 158 159b16: ; preds = %b14 160 br label %b20 161 162b17: ; preds = %b8 163 %v77 = load i32, ptr %v7, align 4 164 %v78 = icmp eq i32 %v77, 0 165 br i1 %v78, label %b18, label %b19 166 167b18: ; preds = %b17 168 %v79 = load ptr, ptr %v1, align 4 169 %v80 = load ptr, ptr %v3, align 4 170 store ptr %v79, ptr %v80, align 4 171 %v82 = load ptr, ptr %v3, align 4 172 %v83 = getelementptr inbounds %s.18, ptr %v82, i32 0, i32 1 173 store ptr null, ptr %v83, align 4 174 store i8 0, ptr %v0 175 store i32 1, ptr %v8 176 br label %b23 177 178b19: ; preds = %b17 179 br label %b20 180 181b20: ; preds = %b19, %b16 182 br label %b21 183 184b21: ; preds = %b20 185 %v84 = load i32, ptr %v7, align 4 186 %v85 = add i32 %v84, 1 187 store i32 %v85, ptr %v7, align 4 188 br label %b5 189 190b22: ; preds = %b7 191 store i8 4, ptr %v0 192 store i32 1, ptr %v8 193 br label %b23 194 195b23: ; preds = %b22, %b18, %b15, %b10, %b3, %b1 196 %v86 = load ptr, ptr %v6 197 call void @llvm.stackrestore(ptr %v86) 198 %v87 = load i8, ptr %v0 199 ret i8 %v87 200} 201 202; Function Attrs: nounwind 203declare ptr @llvm.stacksave() #0 204 205; Function Attrs: inlinehint nounwind 206declare i32 @f1(ptr) #1 207 208declare zeroext i8 @f2(ptr, ptr, ptr, i32) #0 209 210declare i32 @f3(ptr) #0 211 212; Function Attrs: nounwind 213declare void @llvm.stackrestore(ptr) #0 214 215attributes #0 = { nounwind } 216attributes #1 = { inlinehint nounwind } 217