[llvm] 8813c10 - [SLP] Update X86/schedule_budget.ll test case to show budget impact

Bjorn Pettersson via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 9 06:34:19 PDT 2023


Author: Bjorn Pettersson
Date: 2023-06-09T15:33:35+02:00
New Revision: 8813c1087e5e548f64905c057a2e7e1f48a5cce5

URL: https://github.com/llvm/llvm-project/commit/8813c1087e5e548f64905c057a2e7e1f48a5cce5
DIFF: https://github.com/llvm/llvm-project/commit/8813c1087e5e548f64905c057a2e7e1f48a5cce5.diff

LOG: [SLP] Update X86/schedule_budget.ll test case to show budget impact

The comments and the checks in
  test/Transforms/SLPVectorizer/X86/schedule_budget.ll
did not match. After commit 352c46e70716061e99 the vectorization
has happened also with the reduced budget.

This patch is supposed to restore the original intention with the
test case (the one described in the comments). We want to see
that a restricted budget may reduce the amount of vectorization (i.e.
verifying that the -slp-schedule-budget option makes a difference),
while a higher budget still result in vectorization.

Differential Revision: https://reviews.llvm.org/D152530

Added: 
    

Modified: 
    llvm/test/Transforms/SLPVectorizer/X86/schedule_budget.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget.ll b/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget.ll
index c6d2e8d9286da..f574428ba5e75 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt < %s -passes=slp-vectorizer -S  -slp-schedule-budget=16 -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s
+; RUN: opt < %s -passes=slp-vectorizer -S  -slp-schedule-budget=16 -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck --check-prefix LOBUDGET %s
+; RUN: opt < %s -passes=slp-vectorizer -S  -slp-schedule-budget=32 -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck --check-prefix HIBUDGET %s
 
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-apple-macosx10.9.0"
@@ -10,44 +11,97 @@ target triple = "x86_64-apple-macosx10.9.0"
 declare void @unknown()
 
 define void @test(ptr %a, ptr %b, ptr %c, ptr %d) {
-; CHECK-LABEL: @test(
-; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr [[A:%.*]], align 4
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    call void @unknown()
-; CHECK-NEXT:    store <4 x float> [[TMP1]], ptr [[B:%.*]], align 4
-; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x float>, ptr [[C:%.*]], align 4
-; CHECK-NEXT:    store <4 x float> [[TMP4]], ptr [[D:%.*]], align 4
-; CHECK-NEXT:    ret void
+; LOBUDGET-LABEL: @test(
+; LOBUDGET-NEXT:  entry:
+; LOBUDGET-NEXT:    [[L0:%.*]] = load float, ptr [[A:%.*]], align 4
+; LOBUDGET-NEXT:    [[A1:%.*]] = getelementptr inbounds float, ptr [[A]], i64 1
+; LOBUDGET-NEXT:    [[L1:%.*]] = load float, ptr [[A1]], align 4
+; LOBUDGET-NEXT:    [[A2:%.*]] = getelementptr inbounds float, ptr [[A]], i64 2
+; LOBUDGET-NEXT:    [[L2:%.*]] = load float, ptr [[A2]], align 4
+; LOBUDGET-NEXT:    [[A3:%.*]] = getelementptr inbounds float, ptr [[A]], i64 3
+; LOBUDGET-NEXT:    [[L3:%.*]] = load float, ptr [[A3]], align 4
+; LOBUDGET-NEXT:    [[L00:%.*]] = fadd float [[L0]], [[L0]]
+; LOBUDGET-NEXT:    [[L10:%.*]] = fadd float [[L1]], [[L1]]
+; LOBUDGET-NEXT:    [[L20:%.*]] = fadd float [[L2]], [[L2]]
+; LOBUDGET-NEXT:    [[L30:%.*]] = fadd float [[L3]], [[L3]]
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    call void @unknown()
+; LOBUDGET-NEXT:    store float [[L00]], ptr [[B:%.*]], align 4
+; LOBUDGET-NEXT:    [[B1:%.*]] = getelementptr inbounds float, ptr [[B]], i64 1
+; LOBUDGET-NEXT:    store float [[L10]], ptr [[B1]], align 4
+; LOBUDGET-NEXT:    [[B2:%.*]] = getelementptr inbounds float, ptr [[B]], i64 2
+; LOBUDGET-NEXT:    store float [[L20]], ptr [[B2]], align 4
+; LOBUDGET-NEXT:    [[B3:%.*]] = getelementptr inbounds float, ptr [[B]], i64 3
+; LOBUDGET-NEXT:    store float [[L30]], ptr [[B3]], align 4
+; LOBUDGET-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[C:%.*]], align 4
+; LOBUDGET-NEXT:    store <4 x float> [[TMP0]], ptr [[D:%.*]], align 4
+; LOBUDGET-NEXT:    ret void
+;
+; HIBUDGET-LABEL: @test(
+; HIBUDGET-NEXT:  entry:
+; HIBUDGET-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 4
+; HIBUDGET-NEXT:    [[TMP1:%.*]] = fadd <4 x float> [[TMP0]], [[TMP0]]
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    call void @unknown()
+; HIBUDGET-NEXT:    store <4 x float> [[TMP1]], ptr [[B:%.*]], align 4
+; HIBUDGET-NEXT:    [[TMP2:%.*]] = load <4 x float>, ptr [[C:%.*]], align 4
+; HIBUDGET-NEXT:    store <4 x float> [[TMP2]], ptr [[D:%.*]], align 4
+; HIBUDGET-NEXT:    ret void
 ;
 entry:
-  ; Don't vectorize these loads.
+  ; Don't vectorize these loads (with the reduced budget).
   %l0 = load float, ptr %a
   %a1 = getelementptr inbounds float, ptr %a, i64 1
   %l1 = load float, ptr %a1
@@ -55,6 +109,10 @@ entry:
   %l2 = load float, ptr %a2
   %a3 = getelementptr inbounds float, ptr %a, i64 3
   %l3 = load float, ptr %a3
+  %l00 = fadd float %l0, %l0
+  %l10 = fadd float %l1, %l1
+  %l20 = fadd float %l2, %l2
+  %l30 = fadd float %l3, %l3
 
   ; some unrelated instructions inbetween to enlarge the scheduling region
   call void @unknown()
@@ -86,14 +144,15 @@ entry:
   call void @unknown()
   call void @unknown()
 
-  ; Don't vectorize these stores because their operands are too far away.
-  store float %l0, ptr %b
+  ; Don't vectorize these stores because their operands are too far away (with
+  ; the reduced budget).
+  store float %l00, ptr %b
   %b1 = getelementptr inbounds float, ptr %b, i64 1
-  store float %l1, ptr %b1
+  store float %l10, ptr %b1
   %b2 = getelementptr inbounds float, ptr %b, i64 2
-  store float %l2, ptr %b2
+  store float %l20, ptr %b2
   %b3 = getelementptr inbounds float, ptr %b, i64 3
-  store float %l3, ptr %b3
+  store float %l30, ptr %b3
 
   ; But still vectorize the following instructions, because even if the budget
   ; is exceeded there is a minimum region size.


        


More information about the llvm-commits mailing list