| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt -passes=slp-vectorizer -S -slp-threshold=-9999 -mtriple=riscv64-unknown-linux-gnu -mattr=+v < %s | FileCheck %s |
| |
| define i32 @main(ptr %q, ptr %a, i8 %.pre) { |
| ; CHECK-LABEL: define i32 @main( |
| ; CHECK-SAME: ptr [[Q:%.*]], ptr [[A:%.*]], i8 [[DOTPRE:%.*]]) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: [[DOTPRE1:%.*]] = load i8, ptr [[Q]], align 1 |
| ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i8> poison, i8 [[DOTPRE]], i32 0 |
| ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i8> [[TMP0]], i8 [[DOTPRE1]], i32 1 |
| ; CHECK-NEXT: [[TMP2:%.*]] = sext <2 x i8> [[TMP1]] to <2 x i32> |
| ; CHECK-NEXT: [[TMP3:%.*]] = add <2 x i32> [[TMP2]], <i32 0, i32 1> |
| ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <2 x i32> [[TMP2]], <2 x i32> <i32 poison, i32 1>, <2 x i32> <i32 0, i32 3> |
| ; CHECK-NEXT: [[TMP5:%.*]] = shl <2 x i32> [[TMP4]], [[TMP3]] |
| ; CHECK-NEXT: [[TMP6:%.*]] = trunc <2 x i32> [[TMP5]] to <2 x i16> |
| ; CHECK-NEXT: store <2 x i16> [[TMP6]], ptr [[A]], align 2 |
| ; CHECK-NEXT: ret i32 0 |
| ; |
| entry: |
| %.pre1 = load i8, ptr %q, align 1 |
| %conv11.i = sext i8 %.pre to i32 |
| %shl18.i = shl i32 %conv11.i, %conv11.i |
| %conv19.i = trunc i32 %shl18.i to i16 |
| store i16 %conv19.i, ptr %a, align 2 |
| %0 = sext i8 %.pre1 to i32 |
| %1 = add i32 %0, 1 |
| %shl18.i.1 = shl i32 1, %1 |
| %conv19.i.1 = trunc i32 %shl18.i.1 to i16 |
| %arrayidx21.i.1 = getelementptr i8, ptr %a, i64 2 |
| store i16 %conv19.i.1, ptr %arrayidx21.i.1, align 2 |
| ret i32 0 |
| } |