|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 |
| 2 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s |
| 3 | + |
| 4 | +define void @h() { |
| 5 | +; CHECK-LABEL: define void @h() { |
| 6 | +; CHECK-NEXT: entry: |
| 7 | +; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr i8, ptr null, i64 16 |
| 8 | +; CHECK-NEXT: [[TMP0:%.*]] = sub <8 x i32> zeroinitializer, zeroinitializer |
| 9 | +; CHECK-NEXT: [[TMP1:%.*]] = add <8 x i32> zeroinitializer, zeroinitializer |
| 10 | +; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <8 x i32> [[TMP0]], <8 x i32> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 11 | +; CHECK-NEXT: [[TMP3:%.*]] = or <8 x i32> [[TMP2]], zeroinitializer |
| 12 | +; CHECK-NEXT: [[TMP4:%.*]] = trunc <8 x i32> [[TMP3]] to <8 x i16> |
| 13 | +; CHECK-NEXT: store <8 x i16> [[TMP4]], ptr [[ARRAYIDX2]], align 2 |
| 14 | +; CHECK-NEXT: ret void |
| 15 | +; |
| 16 | +entry: |
| 17 | + %conv9 = zext i16 0 to i32 |
| 18 | + %arrayidx2 = getelementptr i8, ptr null, i64 16 |
| 19 | + %conv310 = zext i16 0 to i32 |
| 20 | + %add4 = add i32 %conv310, %conv9 |
| 21 | + %sub = sub i32 0, %conv310 |
| 22 | + %conv15 = sext i16 0 to i32 |
| 23 | + %shr = ashr i32 0, 0 |
| 24 | + %arrayidx18 = getelementptr i8, ptr null, i64 24 |
| 25 | + %conv19 = sext i16 0 to i32 |
| 26 | + %sub20 = sub i32 %shr, %conv19 |
| 27 | + %shr29 = ashr i32 0, 0 |
| 28 | + %add30 = add i32 %shr29, %conv15 |
| 29 | + %sub39 = or i32 %sub, %sub20 |
| 30 | + %conv40 = trunc i32 %sub39 to i16 |
| 31 | + store i16 %conv40, ptr %arrayidx2, align 2 |
| 32 | + %sub44 = or i32 %add4, %add30 |
| 33 | + %conv45 = trunc i32 %sub44 to i16 |
| 34 | + store i16 %conv45, ptr %arrayidx18, align 2 |
| 35 | + %arrayidx2.1 = getelementptr i8, ptr null, i64 18 |
| 36 | + %conv3.112 = zext i16 0 to i32 |
| 37 | + %add4.1 = add i32 %conv3.112, 0 |
| 38 | + %sub.1 = sub i32 0, %conv3.112 |
| 39 | + %conv15.1 = sext i16 0 to i32 |
| 40 | + %shr.1 = ashr i32 0, 0 |
| 41 | + %arrayidx18.1 = getelementptr i8, ptr null, i64 26 |
| 42 | + %conv19.1 = sext i16 0 to i32 |
| 43 | + %sub20.1 = sub i32 %shr.1, %conv19.1 |
| 44 | + %shr29.1 = ashr i32 0, 0 |
| 45 | + %add30.1 = add i32 %shr29.1, %conv15.1 |
| 46 | + %sub39.1 = or i32 %sub.1, %sub20.1 |
| 47 | + %conv40.1 = trunc i32 %sub39.1 to i16 |
| 48 | + store i16 %conv40.1, ptr %arrayidx2.1, align 2 |
| 49 | + %sub44.1 = or i32 %add4.1, %add30.1 |
| 50 | + %conv45.1 = trunc i32 %sub44.1 to i16 |
| 51 | + store i16 %conv45.1, ptr %arrayidx18.1, align 2 |
| 52 | + %conv.213 = zext i16 0 to i32 |
| 53 | + %arrayidx2.2 = getelementptr i8, ptr null, i64 20 |
| 54 | + %conv3.214 = zext i16 0 to i32 |
| 55 | + %add4.2 = add i32 0, %conv.213 |
| 56 | + %sub.2 = sub i32 0, %conv3.214 |
| 57 | + %conv15.2 = sext i16 0 to i32 |
| 58 | + %shr.2 = ashr i32 0, 0 |
| 59 | + %arrayidx18.2 = getelementptr i8, ptr null, i64 28 |
| 60 | + %conv19.2 = sext i16 0 to i32 |
| 61 | + %sub20.2 = sub i32 %shr.2, %conv19.2 |
| 62 | + %shr29.2 = ashr i32 0, 0 |
| 63 | + %add30.2 = add i32 %shr29.2, %conv15.2 |
| 64 | + %sub39.2 = or i32 %sub.2, %sub20.2 |
| 65 | + %conv40.2 = trunc i32 %sub39.2 to i16 |
| 66 | + store i16 %conv40.2, ptr %arrayidx2.2, align 2 |
| 67 | + %sub44.2 = or i32 %add4.2, %add30.2 |
| 68 | + %conv45.2 = trunc i32 %sub44.2 to i16 |
| 69 | + store i16 %conv45.2, ptr %arrayidx18.2, align 2 |
| 70 | + %conv.315 = zext i16 0 to i32 |
| 71 | + %arrayidx2.3 = getelementptr i8, ptr null, i64 22 |
| 72 | + %conv3.316 = zext i16 0 to i32 |
| 73 | + %add4.3 = add i32 0, %conv.315 |
| 74 | + %sub.3 = sub i32 0, %conv3.316 |
| 75 | + %conv15.3 = sext i16 0 to i32 |
| 76 | + %shr.3 = ashr i32 0, 0 |
| 77 | + %arrayidx18.3 = getelementptr i8, ptr null, i64 30 |
| 78 | + %conv19.3 = sext i16 0 to i32 |
| 79 | + %sub20.3 = sub i32 %shr.3, %conv19.3 |
| 80 | + %shr29.3 = ashr i32 0, 0 |
| 81 | + %add30.3 = add i32 %shr29.3, %conv15.3 |
| 82 | + %sub39.3 = or i32 %sub.3, %sub20.3 |
| 83 | + %conv40.3 = trunc i32 %sub39.3 to i16 |
| 84 | + store i16 %conv40.3, ptr %arrayidx2.3, align 2 |
| 85 | + %sub44.3 = or i32 %add4.3, %add30.3 |
| 86 | + %conv45.3 = trunc i32 %sub44.3 to i16 |
| 87 | + store i16 %conv45.3, ptr %arrayidx18.3, align 2 |
| 88 | + ret void |
| 89 | +} |
0 commit comments