|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: opt -S -passes=slp-vectorizer -mtriple=riscv64-unknown-linux -mattr=+v < %s | FileCheck %s |
| 3 | + |
| 4 | +define i64 @test(ptr %arg, i32 %arg1, i64 %i) { |
| 5 | +; CHECK-LABEL: define i64 @test( |
| 6 | +; CHECK-SAME: ptr [[ARG:%.*]], i32 [[ARG1:%.*]], i64 [[I:%.*]]) #[[ATTR0:[0-9]+]] { |
| 7 | +; CHECK-NEXT: [[BB:.*:]] |
| 8 | +; CHECK-NEXT: [[I2:%.*]] = getelementptr i8, ptr [[ARG]], i64 [[I]] |
| 9 | +; CHECK-NEXT: [[I3:%.*]] = getelementptr i8, ptr [[I2]], i64 [[I]] |
| 10 | +; CHECK-NEXT: [[I4:%.*]] = getelementptr i8, ptr [[I3]], i64 [[I]] |
| 11 | +; CHECK-NEXT: [[I5:%.*]] = getelementptr i8, ptr [[I4]], i64 [[I]] |
| 12 | +; CHECK-NEXT: [[I6:%.*]] = getelementptr i8, ptr [[I5]], i64 [[I]] |
| 13 | +; CHECK-NEXT: [[I7:%.*]] = getelementptr i8, ptr [[I6]], i64 [[I]] |
| 14 | +; CHECK-NEXT: [[I8:%.*]] = getelementptr i8, ptr [[I7]], i64 [[I]] |
| 15 | +; CHECK-NEXT: [[I9:%.*]] = getelementptr i8, ptr [[I8]], i64 [[I]] |
| 16 | +; CHECK-NEXT: [[I10:%.*]] = getelementptr i8, ptr [[I9]], i64 [[I]] |
| 17 | +; CHECK-NEXT: [[I11:%.*]] = getelementptr i8, ptr [[I10]], i64 [[I]] |
| 18 | +; CHECK-NEXT: [[I12:%.*]] = getelementptr i8, ptr [[I11]], i64 [[I]] |
| 19 | +; CHECK-NEXT: [[I13:%.*]] = getelementptr i8, ptr [[I12]], i64 [[I]] |
| 20 | +; CHECK-NEXT: [[I14:%.*]] = getelementptr i8, ptr [[I13]], i64 [[I]] |
| 21 | +; CHECK-NEXT: [[I140:%.*]] = load i8, ptr [[I14]], align 1 |
| 22 | +; CHECK-NEXT: [[I1412:%.*]] = zext i8 [[I140]] to i32 |
| 23 | +; CHECK-NEXT: [[I142:%.*]] = mul i32 [[ARG1]], [[I1412]] |
| 24 | +; CHECK-NEXT: [[I143:%.*]] = getelementptr i8, ptr [[I13]], i64 15 |
| 25 | +; CHECK-NEXT: [[I144:%.*]] = load i8, ptr [[I143]], align 1 |
| 26 | +; CHECK-NEXT: [[I1453:%.*]] = zext i8 [[I144]] to i32 |
| 27 | +; CHECK-NEXT: [[I146:%.*]] = mul i32 [[ARG1]], [[I1453]] |
| 28 | +; CHECK-NEXT: [[I147:%.*]] = getelementptr i8, ptr [[I13]], i64 14 |
| 29 | +; CHECK-NEXT: [[I148:%.*]] = load i8, ptr [[I147]], align 1 |
| 30 | +; CHECK-NEXT: [[I1494:%.*]] = zext i8 [[I148]] to i32 |
| 31 | +; CHECK-NEXT: [[I150:%.*]] = mul i32 [[ARG1]], [[I1494]] |
| 32 | +; CHECK-NEXT: [[I151:%.*]] = getelementptr i8, ptr [[I13]], i64 13 |
| 33 | +; CHECK-NEXT: [[I152:%.*]] = load i8, ptr [[I151]], align 1 |
| 34 | +; CHECK-NEXT: [[I1535:%.*]] = zext i8 [[I152]] to i32 |
| 35 | +; CHECK-NEXT: [[I154:%.*]] = mul i32 [[ARG1]], [[I1535]] |
| 36 | +; CHECK-NEXT: [[I1311:%.*]] = or i32 [[I142]], [[I146]] |
| 37 | +; CHECK-NEXT: [[I1312:%.*]] = or i32 [[I1311]], [[I150]] |
| 38 | +; CHECK-NEXT: [[I1313:%.*]] = or i32 [[I1312]], [[I154]] |
| 39 | +; CHECK-NEXT: [[I1536:%.*]] = zext i32 [[I1313]] to i64 |
| 40 | +; CHECK-NEXT: ret i64 [[I1536]] |
| 41 | +; |
| 42 | +bb: |
| 43 | + %i2 = getelementptr i8, ptr %arg, i64 %i |
| 44 | + %i3 = getelementptr i8, ptr %i2, i64 %i |
| 45 | + %i4 = getelementptr i8, ptr %i3, i64 %i |
| 46 | + %i5 = getelementptr i8, ptr %i4, i64 %i |
| 47 | + %i6 = getelementptr i8, ptr %i5, i64 %i |
| 48 | + %i7 = getelementptr i8, ptr %i6, i64 %i |
| 49 | + %i8 = getelementptr i8, ptr %i7, i64 %i |
| 50 | + %i9 = getelementptr i8, ptr %i8, i64 %i |
| 51 | + %i10 = getelementptr i8, ptr %i9, i64 %i |
| 52 | + %i11 = getelementptr i8, ptr %i10, i64 %i |
| 53 | + %i12 = getelementptr i8, ptr %i11, i64 %i |
| 54 | + %i13 = getelementptr i8, ptr %i12, i64 %i |
| 55 | + %i14 = getelementptr i8, ptr %i13, i64 %i |
| 56 | + %i140 = load i8, ptr %i14, align 1 |
| 57 | + %i1412 = zext i8 %i140 to i32 |
| 58 | + %i142 = mul i32 %arg1, %i1412 |
| 59 | + %i143 = getelementptr i8, ptr %i13, i64 15 |
| 60 | + %i144 = load i8, ptr %i143, align 1 |
| 61 | + %i1453 = zext i8 %i144 to i32 |
| 62 | + %i146 = mul i32 %arg1, %i1453 |
| 63 | + %i147 = getelementptr i8, ptr %i13, i64 14 |
| 64 | + %i148 = load i8, ptr %i147, align 1 |
| 65 | + %i1494 = zext i8 %i148 to i32 |
| 66 | + %i150 = mul i32 %arg1, %i1494 |
| 67 | + %i151 = getelementptr i8, ptr %i13, i64 13 |
| 68 | + %i152 = load i8, ptr %i151, align 1 |
| 69 | + %i1535 = zext i8 %i152 to i32 |
| 70 | + %i154 = mul i32 %arg1, %i1535 |
| 71 | + %i1311 = or i32 %i142, %i146 |
| 72 | + %i1312 = or i32 %i1311, %i150 |
| 73 | + %i1313 = or i32 %i1312, %i154 |
| 74 | + %i1536 = zext i32 %i1313 to i64 |
| 75 | + ret i64 %i1536 |
| 76 | +} |
0 commit comments