[llvm] 29028e4 - [slp] Add tests for cause of D118538 revert
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 2 09:45:23 PST 2022
Author: Philip Reames
Date: 2022-03-02T09:45:17-08:00
New Revision: 29028e47bd9b22a56aa1895523b2f31460630132
URL: https://github.com/llvm/llvm-project/commit/29028e47bd9b22a56aa1895523b2f31460630132
DIFF: https://github.com/llvm/llvm-project/commit/29028e47bd9b22a56aa1895523b2f31460630132.diff
LOG: [slp] Add tests for cause of D118538 revert
Added:
llvm/test/Transforms/SLPVectorizer/X86/store_alloca.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/store_alloca.ll b/llvm/test/Transforms/SLPVectorizer/X86/store_alloca.ll
new file mode 100644
index 0000000000000..f46149bf36925
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/X86/store_alloca.ll
@@ -0,0 +1,108 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -slp-vectorizer -slp-max-vf=4 < %s | FileCheck %s
+
+target datalayout = "e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32-a:0:32-S32"
+target triple = "i386-pc-windows-msvc19.16.0"
+
+declare i8* @llvm.stacksave()
+declare void @llvm.stackrestore(i8*)
+declare i8* @wibble(i8*)
+declare void @quux(i32* inalloca(i32))
+
+define void @ham() #1 {
+; CHECK-LABEL: @ham(
+; CHECK-NEXT: [[VAR2:%.*]] = alloca i8, align 1
+; CHECK-NEXT: [[VAR3:%.*]] = alloca i8, align 1
+; CHECK-NEXT: [[VAR4:%.*]] = alloca i8, align 1
+; CHECK-NEXT: [[VAR5:%.*]] = alloca i8, align 1
+; CHECK-NEXT: [[VAR12:%.*]] = alloca [12 x i8*], align 4
+; CHECK-NEXT: [[VAR15:%.*]] = call i8* @wibble(i8* [[VAR2]])
+; CHECK-NEXT: [[VAR16:%.*]] = call i8* @wibble(i8* [[VAR3]])
+; CHECK-NEXT: [[VAR17:%.*]] = call i8* @wibble(i8* [[VAR4]])
+; CHECK-NEXT: [[VAR23:%.*]] = call i8* @llvm.stacksave()
+; CHECK-NEXT: [[VAR24:%.*]] = alloca inalloca i32, align 4
+; CHECK-NEXT: call void @quux(i32* inalloca(i32) [[VAR24]])
+; CHECK-NEXT: call void @llvm.stackrestore(i8* [[VAR23]])
+; CHECK-NEXT: [[VAR32:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 0
+; CHECK-NEXT: [[VAR33:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 1
+; CHECK-NEXT: [[VAR34:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 2
+; CHECK-NEXT: [[VAR35:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 3
+; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i8*> poison, i8* [[VAR4]], i32 0
+; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i8*> [[TMP1]], <4 x i8*> poison, <4 x i32> zeroinitializer
+; CHECK-NEXT: [[TMP2:%.*]] = bitcast i8** [[VAR32]] to <4 x i8*>*
+; CHECK-NEXT: store <4 x i8*> [[SHUFFLE]], <4 x i8*>* [[TMP2]], align 4
+; CHECK-NEXT: [[VAR36:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 4
+; CHECK-NEXT: [[VAR37:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 5
+; CHECK-NEXT: [[VAR38:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 6
+; CHECK-NEXT: [[VAR39:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 7
+; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x i8*> [[TMP1]], i8* [[VAR5]], i32 1
+; CHECK-NEXT: [[SHUFFLE1:%.*]] = shufflevector <4 x i8*> [[TMP3]], <4 x i8*> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+; CHECK-NEXT: [[TMP4:%.*]] = bitcast i8** [[VAR36]] to <4 x i8*>*
+; CHECK-NEXT: store <4 x i8*> [[SHUFFLE1]], <4 x i8*>* [[TMP4]], align 4
+; CHECK-NEXT: ret void
+;
+ %var2 = alloca i8
+ %var3 = alloca i8
+ %var4 = alloca i8
+ %var5 = alloca i8
+ %var12 = alloca [12 x i8*]
+ %var15 = call i8* @wibble(i8* %var2)
+ %var16 = call i8* @wibble(i8* %var3)
+ %var17 = call i8* @wibble(i8* %var4)
+ %var23 = call i8* @llvm.stacksave()
+ %var24 = alloca inalloca i32
+ call void @quux(i32* inalloca(i32) %var24)
+ call void @llvm.stackrestore(i8* %var23)
+ %var32 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 0
+ store i8* %var4, i8** %var32
+ %var33 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 1
+ store i8* %var4, i8** %var33
+ %var34 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 2
+ store i8* %var4, i8** %var34
+ %var35 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 3
+ store i8* %var4, i8** %var35
+ %var36 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 4
+ store i8* %var4, i8** %var36
+ %var37 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 5
+ store i8* %var5, i8** %var37
+ %var38 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 6
+ store i8* %var5, i8** %var38
+ %var39 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 7
+ store i8* %var5, i8** %var39
+ ret void
+}
+
+define void @spam() #1 {
+; CHECK-LABEL: @spam(
+; CHECK-NEXT: [[VAR4:%.*]] = alloca i8, align 1
+; CHECK-NEXT: [[VAR5:%.*]] = alloca i8, align 1
+; CHECK-NEXT: [[VAR12:%.*]] = alloca [12 x i8*], align 4
+; CHECK-NEXT: [[VAR36:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 4
+; CHECK-NEXT: [[VAR37:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 5
+; CHECK-NEXT: [[VAR38:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 6
+; CHECK-NEXT: [[VAR39:%.*]] = getelementptr inbounds [12 x i8*], [12 x i8*]* [[VAR12]], i32 0, i32 7
+; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i8*> poison, i8* [[VAR4]], i32 0
+; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i8*> [[TMP1]], i8* [[VAR5]], i32 1
+; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i8*> [[TMP2]], <4 x i8*> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
+; CHECK-NEXT: [[TMP3:%.*]] = bitcast i8** [[VAR36]] to <4 x i8*>*
+; CHECK-NEXT: store <4 x i8*> [[SHUFFLE]], <4 x i8*>* [[TMP3]], align 4
+; CHECK-NEXT: ret void
+;
+ %var4 = alloca i8
+ %var5 = alloca i8
+ %var12 = alloca [12 x i8*]
+ %var36 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 4
+ store i8* %var4, i8** %var36
+ %var37 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 5
+ store i8* %var5, i8** %var37
+ %var38 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 6
+ store i8* %var5, i8** %var38
+ %var39 = getelementptr inbounds [12 x i8*], [12 x i8*]* %var12, i32 0, i32 7
+ store i8* %var5, i8** %var39
+ ret void
+}
+
+
+
+attributes #0 = { nofree nosync nounwind willreturn }
+attributes #1 = { "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+sse3,+x87" }
More information about the llvm-commits
mailing list