| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s |
| |
| define void @test(ptr %0, <8 x i8> %1) { |
| ; CHECK-LABEL: define void @test( |
| ; CHECK-SAME: ptr [[TMP0:%.*]], <8 x i8> [[TMP1:%.*]]) { |
| ; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr [[TMP0]], align 2 |
| ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13436 |
| ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13444 |
| ; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP8]], align 4 |
| ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13544 |
| ; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13536 |
| ; CHECK-NEXT: [[TMP7:%.*]] = load <8 x i8>, ptr [[TMP4]], align 4 |
| ; CHECK-NEXT: [[TMP12:%.*]] = insertelement <8 x i8> poison, i8 [[TMP6]], i32 0 |
| ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <8 x i8> [[TMP12]], i8 [[TMP3]], i32 1 |
| ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <8 x i8> [[TMP9]], <8 x i8> poison, <8 x i32> <i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> |
| ; CHECK-NEXT: [[TMP13:%.*]] = or <8 x i8> [[TMP10]], [[TMP7]] |
| ; CHECK-NEXT: store <8 x i8> [[TMP13]], ptr [[TMP11]], align 4 |
| ; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <8 x i8> [[TMP1]], <8 x i8> poison, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 5, i32 0, i32 7> |
| ; CHECK-NEXT: [[TMP15:%.*]] = or <8 x i8> [[TMP7]], [[TMP14]] |
| ; CHECK-NEXT: store <8 x i8> [[TMP15]], ptr [[TMP5]], align 4 |
| ; CHECK-NEXT: ret void |
| ; |
| %3 = load i8, ptr %0, align 2 |
| %4 = getelementptr i8, ptr %0, i64 13442 |
| %5 = load i8, ptr %4, align 2 |
| %6 = or i8 %5, %3 |
| %7 = getelementptr i8, ptr %0, i64 13550 |
| store i8 %6, ptr %7, align 2 |
| %8 = extractelement <8 x i8> %1, i64 0 |
| %9 = or i8 %5, %8 |
| %10 = getelementptr i8, ptr %0, i64 13542 |
| store i8 %9, ptr %10, align 2 |
| %11 = getelementptr i8, ptr %0, i64 13438 |
| %12 = load i8, ptr %11, align 2 |
| %13 = or i8 %12, %3 |
| %14 = getelementptr i8, ptr %0, i64 13546 |
| store i8 %13, ptr %14, align 2 |
| %15 = extractelement <8 x i8> %1, i64 2 |
| %16 = or i8 %12, %15 |
| %17 = getelementptr i8, ptr %0, i64 13538 |
| store i8 %16, ptr %17, align 2 |
| %18 = getelementptr i8, ptr %0, i64 13440 |
| %19 = load i8, ptr %18, align 4 |
| %20 = or i8 %19, %3 |
| %21 = getelementptr i8, ptr %0, i64 13548 |
| store i8 %20, ptr %21, align 4 |
| %22 = extractelement <8 x i8> %1, i64 4 |
| %23 = or i8 %19, %22 |
| %24 = getelementptr i8, ptr %0, i64 13540 |
| store i8 %23, ptr %24, align 4 |
| %25 = getelementptr i8, ptr %0, i64 13436 |
| %26 = load i8, ptr %25, align 4 |
| %27 = getelementptr i8, ptr %0, i64 13444 |
| %28 = load i8, ptr %27, align 4 |
| %29 = or i8 %28, %26 |
| %30 = getelementptr i8, ptr %0, i64 13544 |
| store i8 %29, ptr %30, align 4 |
| %31 = or i8 %26, %8 |
| %32 = getelementptr i8, ptr %0, i64 13536 |
| store i8 %31, ptr %32, align 4 |
| %33 = getelementptr i8, ptr %0, i64 13443 |
| %34 = load i8, ptr %33, align 1 |
| %35 = or i8 %34, %3 |
| %36 = getelementptr i8, ptr %0, i64 13551 |
| store i8 %35, ptr %36, align 1 |
| %37 = extractelement <8 x i8> %1, i64 7 |
| %38 = or i8 %34, %37 |
| %39 = getelementptr i8, ptr %0, i64 13543 |
| store i8 %38, ptr %39, align 1 |
| %40 = getelementptr i8, ptr %0, i64 13439 |
| %41 = load i8, ptr %40, align 1 |
| %42 = or i8 %41, %3 |
| %43 = getelementptr i8, ptr %0, i64 13547 |
| store i8 %42, ptr %43, align 1 |
| %44 = extractelement <8 x i8> %1, i64 3 |
| %45 = or i8 %41, %44 |
| %46 = getelementptr i8, ptr %0, i64 13539 |
| store i8 %45, ptr %46, align 1 |
| %47 = getelementptr i8, ptr %0, i64 13441 |
| %48 = load i8, ptr %47, align 1 |
| %49 = or i8 %48, %3 |
| %50 = getelementptr i8, ptr %0, i64 13549 |
| store i8 %49, ptr %50, align 1 |
| %51 = extractelement <8 x i8> %1, i64 5 |
| %52 = or i8 %48, %51 |
| %53 = getelementptr i8, ptr %0, i64 13541 |
| store i8 %52, ptr %53, align 1 |
| %54 = getelementptr i8, ptr %0, i64 13437 |
| %55 = load i8, ptr %54, align 1 |
| %56 = or i8 %55, %3 |
| %57 = getelementptr i8, ptr %0, i64 13545 |
| store i8 %56, ptr %57, align 1 |
| %58 = or i8 %55, %8 |
| %59 = getelementptr i8, ptr %0, i64 13537 |
| store i8 %58, ptr %59, align 1 |
| ret void |
| } |