| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: opt -S --passes=slp-vectorizer -mtriple=s390x-ibm-linux -mcpu=z13 -slp-max-reg-size=256 -slp-vectorize-hor-store -slp-vectorize-non-power-of-2 < %s | FileCheck %s |
| |
| @c = external global [1 x [10 x i32]] |
| @j.0 = external global i32 |
| |
| define void @p() { |
| ; CHECK-LABEL: define void @p( |
| ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[ENTRY:.*:]] |
| ; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i32>, ptr getelementptr inbounds nuw (i8, ptr @c, i64 52), align 4 |
| ; CHECK-NEXT: [[TMP1:%.*]] = extractelement <4 x i32> [[TMP0]], i32 0 |
| ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x i32> [[TMP0]], i32 2 |
| ; CHECK-NEXT: [[TMP3:%.*]] = xor <4 x i32> [[TMP0]], splat (i32 1) |
| ; CHECK-NEXT: store <4 x i32> [[TMP3]], ptr getelementptr inbounds nuw (i8, ptr @c, i64 52), align 4 |
| ; CHECK-NEXT: [[TMP4:%.*]] = load <7 x i32>, ptr getelementptr inbounds nuw (i8, ptr @c, i64 200), align 4 |
| ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <7 x i32> [[TMP4]], i32 3 |
| ; CHECK-NEXT: [[OR_1_5_I_3:%.*]] = or i32 [[TMP1]], [[TMP5]] |
| ; CHECK-NEXT: store i32 [[OR_1_5_I_3]], ptr @j.0, align 4 |
| ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <7 x i32> [[TMP4]], i32 5 |
| ; CHECK-NEXT: [[TMP7:%.*]] = xor <7 x i32> [[TMP4]], splat (i32 1) |
| ; CHECK-NEXT: store <7 x i32> [[TMP7]], ptr getelementptr inbounds nuw (i8, ptr @c, i64 200), align 4 |
| ; CHECK-NEXT: [[TMP8:%.*]] = load <4 x i32>, ptr getelementptr inbounds nuw (i8, ptr @c, i64 252), align 4 |
| ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i32> [[TMP8]], i32 1 |
| ; CHECK-NEXT: [[TMP10:%.*]] = or i32 [[TMP9]], [[TMP2]] |
| ; CHECK-NEXT: [[OR_1_5_I_5:%.*]] = or i32 [[TMP10]], [[TMP6]] |
| ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <4 x i32> [[TMP8]], i32 2 |
| ; CHECK-NEXT: [[OR_1_6_I_5:%.*]] = or i32 [[OR_1_5_I_5]], [[TMP11]] |
| ; CHECK-NEXT: store i32 [[OR_1_6_I_5]], ptr @j.0, align 4 |
| ; CHECK-NEXT: [[TMP12:%.*]] = xor <4 x i32> [[TMP8]], splat (i32 1) |
| ; CHECK-NEXT: store <4 x i32> [[TMP12]], ptr getelementptr inbounds nuw (i8, ptr @c, i64 252), align 4 |
| ; CHECK-NEXT: ret void |
| ; |
| entry: |
| %arrayidx12.promoted.5.i = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 200), align 4 |
| %conv14.5.i = xor i32 %arrayidx12.promoted.5.i, 1 |
| store i32 %conv14.5.i, ptr getelementptr inbounds nuw (i8, ptr @c, i64 200), align 4 |
| %arrayidx12.promoted.5.i.1 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 204), align 4 |
| %conv14.5.i.1 = xor i32 %arrayidx12.promoted.5.i.1, 1 |
| store i32 %conv14.5.i.1, ptr getelementptr inbounds nuw (i8, ptr @c, i64 204), align 4 |
| %arrayidx12.promoted.5.i.2 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 208), align 4 |
| %conv14.5.i.2 = xor i32 %arrayidx12.promoted.5.i.2, 1 |
| store i32 %conv14.5.i.2, ptr getelementptr inbounds nuw (i8, ptr @c, i64 208), align 4 |
| %arrayidx12.promoted.1.i.3 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 52), align 4 |
| %conv14.1.i.3 = xor i32 %arrayidx12.promoted.1.i.3, 1 |
| store i32 %conv14.1.i.3, ptr getelementptr inbounds nuw (i8, ptr @c, i64 52), align 4 |
| %arrayidx12.promoted.5.i.3 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 212), align 4 |
| %conv14.5.i.3 = xor i32 %arrayidx12.promoted.5.i.3, 1 |
| store i32 %conv14.5.i.3, ptr getelementptr inbounds nuw (i8, ptr @c, i64 212), align 4 |
| %arrayidx12.promoted.6.i.3 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 252), align 4 |
| %conv14.6.i.3 = xor i32 %arrayidx12.promoted.6.i.3, 1 |
| %or.1.5.i.3 = or i32 %arrayidx12.promoted.1.i.3, %arrayidx12.promoted.5.i.3 |
| store i32 %conv14.6.i.3, ptr getelementptr inbounds nuw (i8, ptr @c, i64 252), align 4 |
| store i32 %or.1.5.i.3, ptr @j.0, align 4 |
| %arrayidx12.promoted.1.i.4 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 56), align 4 |
| %conv14.1.i.4 = xor i32 %arrayidx12.promoted.1.i.4, 1 |
| store i32 %conv14.1.i.4, ptr getelementptr inbounds nuw (i8, ptr @c, i64 56), align 4 |
| %arrayidx12.promoted.5.i.4 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 216), align 4 |
| %conv14.5.i.4 = xor i32 %arrayidx12.promoted.5.i.4, 1 |
| store i32 %conv14.5.i.4, ptr getelementptr inbounds nuw (i8, ptr @c, i64 216), align 4 |
| %arrayidx12.promoted.6.i.4 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 256), align 4 |
| %conv14.6.i.4 = xor i32 %arrayidx12.promoted.6.i.4, 1 |
| store i32 %conv14.6.i.4, ptr getelementptr inbounds nuw (i8, ptr @c, i64 256), align 4 |
| %arrayidx12.promoted.1.i.5 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 60), align 4 |
| %conv14.1.i.5 = xor i32 %arrayidx12.promoted.1.i.5, 1 |
| store i32 %conv14.1.i.5, ptr getelementptr inbounds nuw (i8, ptr @c, i64 60), align 4 |
| %arrayidx12.promoted.5.i.5 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 220), align 4 |
| %conv14.5.i.5 = xor i32 %arrayidx12.promoted.5.i.5, 1 |
| store i32 %conv14.5.i.5, ptr getelementptr inbounds nuw (i8, ptr @c, i64 220), align 4 |
| %arrayidx12.promoted.6.i.5 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 260), align 4 |
| %conv14.6.i.5 = xor i32 %arrayidx12.promoted.6.i.5, 1 |
| %0 = or i32 %arrayidx12.promoted.6.i.4, %arrayidx12.promoted.1.i.5 |
| %or.1.5.i.5 = or i32 %0, %arrayidx12.promoted.5.i.5 |
| %or.1.6.i.5 = or i32 %or.1.5.i.5, %arrayidx12.promoted.6.i.5 |
| store i32 %conv14.6.i.5, ptr getelementptr inbounds nuw (i8, ptr @c, i64 260), align 4 |
| store i32 %or.1.6.i.5, ptr @j.0, align 4 |
| %arrayidx12.promoted.1.i.6 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 64), align 4 |
| %conv14.1.i.6 = xor i32 %arrayidx12.promoted.1.i.6, 1 |
| store i32 %conv14.1.i.6, ptr getelementptr inbounds nuw (i8, ptr @c, i64 64), align 4 |
| %arrayidx12.promoted.5.i.6 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 224), align 4 |
| %conv14.5.i.6 = xor i32 %arrayidx12.promoted.5.i.6, 1 |
| store i32 %conv14.5.i.6, ptr getelementptr inbounds nuw (i8, ptr @c, i64 224), align 4 |
| %arrayidx12.promoted.6.i.6 = load i32, ptr getelementptr inbounds nuw (i8, ptr @c, i64 264), align 4 |
| %conv14.6.i.6 = xor i32 %arrayidx12.promoted.6.i.6, 1 |
| store i32 %conv14.6.i.6, ptr getelementptr inbounds nuw (i8, ptr @c, i64 264), align 4 |
| ret void |
| } |