1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -mtriple=x86_64-unknown-linux-gnu -mattr=+avx10.1 -passes=slp-vectorizer -S -slp-revec < %s | FileCheck %s
define void @test(ptr %in) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[IN:%.*]], i64 32
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[IN]], i64 64
; CHECK-NEXT: [[TMP2:%.*]] = call <32 x i16> @llvm.masked.load.v32i16.p0(ptr [[TMP1]], i32 2, <32 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <32 x i16> poison)
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <32 x i16> [[TMP2]], <32 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
; CHECK-NEXT: [[TMP7:%.*]] = or <16 x i16> zeroinitializer, [[TMP3]]
; CHECK-NEXT: store <16 x i16> [[TMP7]], ptr [[TMP0]], align 2
; CHECK-NEXT: ret void
;
entry:
%0 = getelementptr i8, ptr %in, i64 112
%wide.load = load <8 x i16>, ptr %0, align 2
%1 = sext <8 x i16> %wide.load to <8 x i32>
%2 = getelementptr i8, ptr %in, i64 48
%3 = or <8 x i32> zeroinitializer, %1
%4 = getelementptr i8, ptr %in, i64 32
%5 = getelementptr i8, ptr %in, i64 64
%wide.load155 = load <8 x i16>, ptr %5, align 2
%6 = sext <8 x i16> %wide.load155 to <8 x i32>
%7 = or <8 x i32> zeroinitializer, %6
%8 = trunc <8 x i32> %3 to <8 x i16>
store <8 x i16> %8, ptr %2, align 2
%9 = trunc <8 x i32> %7 to <8 x i16>
store <8 x i16> %9, ptr %4, align 2
ret void
}
|