Krzysztof Parzyszek | 046090d | 2018-03-12 14:01:28 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=hexagon -hexagon-hwloop-preheader < %s |
| 2 | ; REQUIRES: asserts |
| 3 | |
| 4 | ; Checks that a subreg in a Phi is propagated correctly when a |
| 5 | ; new preheader is created in the Hardware Loop pass. |
| 6 | |
| 7 | ; Function Attrs: nounwind |
| 8 | define void @f0() #0 { |
| 9 | b0: |
| 10 | br label %b2 |
| 11 | |
| 12 | b1: ; preds = %b2, %b1 |
| 13 | %v0 = or i64 0, undef |
| 14 | %v1 = add nsw i64 0, %v0 |
| 15 | %v2 = add nsw i64 %v1, 0 |
| 16 | %v3 = add nsw i64 %v2, 0 |
| 17 | %v4 = add nsw i64 %v3, 0 |
| 18 | %v5 = add nsw i64 %v4, 0 |
| 19 | %v6 = add nsw i64 %v5, 0 |
| 20 | %v7 = load i32, i32* undef, align 4 |
| 21 | %v8 = ashr i32 %v7, 5 |
| 22 | %v9 = sext i32 %v8 to i64 |
| 23 | %v10 = mul nsw i64 %v9, %v9 |
| 24 | %v11 = add nsw i64 %v6, %v10 |
| 25 | %v12 = add nsw i64 %v11, 0 |
| 26 | %v13 = add nsw i64 0, %v12 |
| 27 | %v14 = add nsw i64 %v13, 0 |
| 28 | %v15 = add nsw i64 %v14, 0 |
| 29 | %v16 = add nsw i64 %v15, 0 |
| 30 | %v17 = add nsw i64 %v16, 0 |
| 31 | %v18 = add nsw i64 %v17, 0 |
| 32 | %v19 = add nsw i64 %v18, 0 |
| 33 | %v20 = add nsw i64 %v19, 0 |
| 34 | %v21 = lshr i64 %v20, 32 |
| 35 | %v22 = trunc i64 %v21 to i32 |
| 36 | br i1 undef, label %b1, label %b3 |
| 37 | |
| 38 | b2: ; preds = %b5, %b0 |
| 39 | br i1 undef, label %b1, label %b4 |
| 40 | |
| 41 | b3: ; preds = %b1 |
| 42 | br i1 false, label %b5, label %b4 |
| 43 | |
| 44 | b4: ; preds = %b4, %b3, %b2 |
| 45 | %v23 = phi i32 [ %v37, %b4 ], [ undef, %b2 ], [ %v22, %b3 ] |
| 46 | %v24 = zext i32 %v23 to i64 |
| 47 | %v25 = shl nuw i64 %v24, 32 |
| 48 | %v26 = or i64 %v25, 0 |
| 49 | %v27 = add nsw i64 0, %v26 |
| 50 | %v28 = add nsw i64 %v27, 0 |
| 51 | %v29 = add nsw i64 %v28, 0 |
| 52 | %v30 = add nsw i64 %v29, 0 |
| 53 | %v31 = add nsw i64 %v30, 0 |
| 54 | %v32 = add nsw i64 %v31, 0 |
| 55 | %v33 = add nsw i64 %v32, 0 |
| 56 | %v34 = add nsw i64 %v33, 0 |
| 57 | %v35 = trunc i64 %v34 to i32 |
| 58 | %v36 = lshr i64 %v34, 32 |
| 59 | %v37 = trunc i64 %v36 to i32 |
| 60 | %v38 = icmp slt i32 undef, undef |
| 61 | br i1 %v38, label %b4, label %b5 |
| 62 | |
| 63 | b5: ; preds = %b4, %b3 |
| 64 | br label %b2 |
| 65 | } |
| 66 | |
| 67 | attributes #0 = { nounwind "target-cpu"="hexagonv55" } |