1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
|
; RUN: llc -O3 -march=hexagon < %s | FileCheck %s
; REQUIRES: asserts
;
; Check that IMPLICIT_DEFs are packetized correctly
; (previously caused an assert).
;
; CHECK: f1:
%0 = type { i8 (i8)*, i8 (i8, %1*)*, i8 (i8)* }
%1 = type { [16384 x i16], [8192 x i16], [8192 x i16], [8192 x i32], i32, i32, i32, %2, %2, i32, i32, i32, i32 }
%2 = type { i32, i32, i32 }
%3 = type { %4 }
%4 = type { i32, i8* }
%5 = type { i8, i32, i32, i32, i16, i16, i16, i16, i8, i16, %6, %6, i32, i16, i16, i16, i16, i8 }
%6 = type { i32, i32, i32, i32, i32, i32, i32, i8, i8 }
%7 = type { i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, %2, %2, %8, i8 }
%8 = type { %2, %2 }
@g0 = external hidden unnamed_addr constant [7 x %0], align 8
@g1 = external hidden global %1, align 4
@g2 = external hidden constant %3, align 4
@g3 = external hidden constant %3, align 4
declare void @f0(%3*, i32, i32)
define hidden fastcc i32 @f1(%5* %a0, %7* %a1, %2* %a2) {
b0:
br i1 undef, label %b1, label %b2
b1: ; preds = %b0
unreachable
b2: ; preds = %b0
br i1 undef, label %b3, label %b4
b3: ; preds = %b2
br label %b55
b4: ; preds = %b2
br i1 undef, label %b6, label %b5
b5: ; preds = %b4
%v0 = getelementptr inbounds %5, %5* %a0, i32 0, i32 1
br label %b7
b6: ; preds = %b4
br label %b55
b7: ; preds = %b52, %b5
%v1 = phi i32 [ undef, %b5 ], [ %v43, %b52 ]
%v2 = phi i32 [ 5, %b5 ], [ %v45, %b52 ]
%v3 = load i32, i32* undef, align 4
%v4 = load i32, i32* %v0, align 4
%v5 = sext i32 %v4 to i64
%v6 = sdiv i64 0, %v5
%v7 = trunc i64 %v6 to i32
%v8 = icmp slt i32 %v7, 204800
br i1 %v8, label %b8, label %b9
b8: ; preds = %b7
call void @f0(%3* @g2, i32 %v3, i32 %v4)
br label %b54
b9: ; preds = %b7
%v9 = load i8, i8* undef, align 1
%v10 = zext i8 %v9 to i32
br i1 undef, label %b10, label %b11
b10: ; preds = %b9
br label %b47
b11: ; preds = %b9
br i1 undef, label %b12, label %b47
b12: ; preds = %b11
br i1 undef, label %b13, label %b47
b13: ; preds = %b12
%v11 = getelementptr inbounds [7 x %0], [7 x %0]* @g0, i32 0, i32 %v10, i32 2
%v12 = load i8 (i8)*, i8 (i8)** %v11, align 4
%v13 = call zeroext i8 %v12(i8 zeroext %v9)
br i1 undef, label %b14, label %b47
b14: ; preds = %b13
br i1 undef, label %b15, label %b16
b15: ; preds = %b14
br label %b46
b16: ; preds = %b14
br i1 false, label %b17, label %b22
b17: ; preds = %b16
br i1 undef, label %b18, label %b19
b18: ; preds = %b17
unreachable
b19: ; preds = %b17
br label %b20
b20: ; preds = %b20, %b19
br i1 undef, label %b20, label %b21
b21: ; preds = %b20
unreachable
b22: ; preds = %b16
br i1 false, label %b23, label %b24
b23: ; preds = %b22
br label %b47
b24: ; preds = %b22
br i1 false, label %b25, label %b26
b25: ; preds = %b24
unreachable
b26: ; preds = %b24
br label %b27
b27: ; preds = %b36, %b26
%v14 = phi i32 [ 16, %b26 ], [ %v30, %b36 ]
%v15 = getelementptr inbounds %1, %1* @g1, i32 0, i32 2, i32 %v14
%v16 = load i16, i16* %v15, align 2
%v17 = sext i16 %v16 to i32
%v18 = select i1 undef, i32 undef, i32 %v17
%v19 = sext i32 %v18 to i64
%v20 = or i32 %v18, undef
br i1 false, label %b28, label %b29
b28: ; preds = %b27
unreachable
b29: ; preds = %b27
br i1 false, label %b30, label %b31
b30: ; preds = %b29
unreachable
b31: ; preds = %b29
%v21 = mul nsw i64 undef, %v19
%v22 = sdiv i64 0, %v19
%v23 = add nsw i64 %v22, 0
%v24 = lshr i64 %v23, 5
%v25 = trunc i64 %v24 to i32
%v26 = sub nsw i32 1608, %v25
%v27 = icmp sgt i16 %v16, -1
%v28 = and i1 undef, %v27
br i1 %v28, label %b32, label %b33
b32: ; preds = %b31
store i32 %v26, i32* undef, align 4
br label %b36
b33: ; preds = %b31
br i1 undef, label %b34, label %b35
b34: ; preds = %b33
%v29 = getelementptr inbounds %1, %1* @g1, i32 0, i32 3, i32 %v14
store i32 undef, i32* %v29, align 4
br label %b36
b35: ; preds = %b33
br label %b36
b36: ; preds = %b35, %b34, %b32
%v30 = add nuw nsw i32 %v14, 1
%v31 = icmp ult i32 %v30, 8192
br i1 %v31, label %b27, label %b37
b37: ; preds = %b36
br label %b38
b38: ; preds = %b38, %b37
br i1 undef, label %b38, label %b39
b39: ; preds = %b38
br i1 false, label %b40, label %b41
b40: ; preds = %b39
unreachable
b41: ; preds = %b39
%v32 = icmp ult i8 %v9, 6
br i1 %v32, label %b43, label %b42
b42: ; preds = %b41
br label %b47
b43: ; preds = %b41
%v33 = load i64, i64* undef, align 8
br label %b44
b44: ; preds = %b44, %b43
br i1 undef, label %b45, label %b44
b45: ; preds = %b44
%v34 = sdiv i64 undef, %v33
%v35 = trunc i64 %v34 to i32
%v36 = add nsw i32 0, %v3
%v37 = sext i32 %v36 to i64
%v38 = mul nsw i64 %v37, 4096000
%v39 = sdiv i64 %v38, 0
%v40 = trunc i64 %v39 to i32
br label %b46
b46: ; preds = %b45, %b15
%v41 = phi i32 [ undef, %b15 ], [ %v40, %b45 ]
br label %b47
b47: ; preds = %b46, %b42, %b23, %b13, %b12, %b11, %b10
%v42 = phi i8 [ 1, %b10 ], [ 0, %b46 ], [ 3, %b23 ], [ 1, %b42 ], [ %v13, %b13 ], [ undef, %b12 ], [ undef, %b11 ]
%v43 = phi i32 [ %v1, %b10 ], [ %v41, %b46 ], [ %v1, %b23 ], [ %v1, %b42 ], [ %v1, %b13 ], [ %v1, %b12 ], [ %v1, %b11 ]
%v44 = icmp eq i8 %v42, 1
br i1 %v44, label %b48, label %b49
b48: ; preds = %b47
br label %b54
b49: ; preds = %b47
br i1 undef, label %b50, label %b52
b50: ; preds = %b49
br i1 undef, label %b51, label %b53
b51: ; preds = %b50
br label %b52
b52: ; preds = %b51, %b49
%v45 = add nsw i32 %v2, -1
%v46 = icmp eq i32 %v45, 0
br i1 %v46, label %b54, label %b7
b53: ; preds = %b50
call void @f0(%3* @g3, i32 %v43, i32 undef)
unreachable
b54: ; preds = %b52, %b48, %b8
unreachable
b55: ; preds = %b6, %b3
ret i32 0
}
|