[llvm] cb648ba - [SLP]Check if the user node has instructions, used only outside

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Thu May 29 10:10:00 PDT 2025


Author: Alexey Bataev
Date: 2025-05-29T10:09:49-07:00
New Revision: cb648ba97003bc0aa94e86f8e89ea6e3e3d09a11

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

LOG: [SLP]Check if the user node has instructions, used only outside

Gather nodes with parents, which scalar instructions are used only
outside, are generated before the whole tree vectorization. Need to
teach isGatherShuffledSingleRegisterEntry to check that such nodes are
emitted first and they cannot depend on other nodes, which are emitted
later.

Fixes #141628

Added: 
    llvm/test/Transforms/SLPVectorizer/X86/many-uses-parent-node.ll

Modified: 
    llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 831703b375d9b..3e7f4cb56c0b3 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -15317,6 +15317,20 @@ BoUpSLP::isGatherShuffledSingleRegisterEntry(
           UserPHI ? UserPHI->getIncomingBlock(UseEI.EdgeIdx)->getTerminator()
                   : &getLastInstructionInBundle(UseEI.UserTE);
       if (TEInsertPt == InsertPt) {
+        // Check nodes, which might be emitted first.
+        if (TEUseEI.UserTE->State == TreeEntry::Vectorize &&
+            (TEUseEI.UserTE->getOpcode() != Instruction::PHI ||
+             TEUseEI.UserTE->isAltShuffle()) &&
+            all_of(TEUseEI.UserTE->Scalars,
+                   [](Value *V) { return isUsedOutsideBlock(V); })) {
+          if (UseEI.UserTE->State != TreeEntry::Vectorize ||
+              (UseEI.UserTE->getOpcode() == Instruction::PHI &&
+               !UseEI.UserTE->isAltShuffle()) ||
+              any_of(UseEI.UserTE->Scalars,
+                     [](Value *V) { return !isUsedOutsideBlock(V); }))
+            continue;
+        }
+
         // If the schedulable insertion point is used in multiple entries - just
         // exit, no known ordering at this point, available only after real
         // scheduling.

diff  --git a/llvm/test/Transforms/SLPVectorizer/X86/many-uses-parent-node.ll b/llvm/test/Transforms/SLPVectorizer/X86/many-uses-parent-node.ll
new file mode 100644
index 0000000000000..f90af195412d7
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/X86/many-uses-parent-node.ll
@@ -0,0 +1,518 @@
+; 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 -slp-threshold=-99999 < %s | FileCheck %s
+
+define i32 @test(ptr addrspace(1) %arg) {
+; CHECK-LABEL: define i32 @test(
+; CHECK-SAME: ptr addrspace(1) [[ARG:%.*]]) {
+; CHECK-NEXT:  [[BB:.*:]]
+; CHECK-NEXT:    br label %[[BB1:.*]]
+; CHECK:       [[BB1]]:
+; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <2 x ptr addrspace(1)> poison, ptr addrspace(1) [[ARG]], i32 0
+; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <2 x ptr addrspace(1)> [[TMP0]], <2 x ptr addrspace(1)> poison, <2 x i32> zeroinitializer
+; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i8, <2 x ptr addrspace(1)> [[TMP1]], <2 x i64> <i64 21, i64 22>
+; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i8, <2 x ptr addrspace(1)> [[TMP1]], <2 x i64> <i64 20, i64 21>
+; CHECK-NEXT:    [[GETELEMENTPTR3:%.*]] = getelementptr i8, ptr addrspace(1) [[ARG]], i64 22
+; CHECK-NEXT:    br i1 false, label %[[BB73:.*]], label %[[BB150:.*]]
+; CHECK:       [[BB4:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB68:.*]], label %[[BB70:.*]]
+; CHECK:       [[BB5:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB64:.*]], label %[[BB66:.*]]
+; CHECK:       [[BB6:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB60:.*]], label %[[BB62:.*]]
+; CHECK:       [[BB7:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB8:.*]], label %[[BB58:.*]]
+; CHECK:       [[BB8]]:
+; CHECK-NEXT:    br i1 false, label %[[BB54:.*]], label %[[BB56:.*]]
+; CHECK:       [[BB9:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB50:.*]], label %[[BB52:.*]]
+; CHECK:       [[BB10:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB46:.*]], label %[[BB48:.*]]
+; CHECK:       [[BB11:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB42:.*]], label %[[BB44:.*]]
+; CHECK:       [[BB12:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB38:.*]], label %[[BB40:.*]]
+; CHECK:       [[BB13:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB36:.*]], label %[[BB122:.*]]
+; CHECK:       [[BB14:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB32:.*]], label %[[BB34:.*]]
+; CHECK:       [[BB15:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB28:.*]], label %[[BB30:.*]]
+; CHECK:       [[BB16:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB17:.*]], label %[[BB26:.*]]
+; CHECK:       [[BB17]]:
+; CHECK-NEXT:    br i1 false, label %[[BB22:.*]], label %[[BB24:.*]]
+; CHECK:       [[BB18:.*:]]
+; CHECK-NEXT:    br i1 false, label %[[BB19:.*]], label %[[BB20:.*]]
+; CHECK:       [[BB19]]:
+; CHECK-NEXT:    [[LOAD:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB20]]:
+; CHECK-NEXT:    [[LOAD21:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB22]]:
+; CHECK-NEXT:    [[LOAD23:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB24]]:
+; CHECK-NEXT:    [[LOAD25:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB26]]:
+; CHECK-NEXT:    [[LOAD27:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB28]]:
+; CHECK-NEXT:    [[LOAD29:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB30]]:
+; CHECK-NEXT:    [[LOAD31:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB32]]:
+; CHECK-NEXT:    [[LOAD33:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB34]]:
+; CHECK-NEXT:    [[LOAD35:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB36]]:
+; CHECK-NEXT:    [[LOAD37:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB38]]:
+; CHECK-NEXT:    [[LOAD39:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB40]]:
+; CHECK-NEXT:    [[LOAD41:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB42]]:
+; CHECK-NEXT:    [[LOAD43:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB44]]:
+; CHECK-NEXT:    [[LOAD45:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB46]]:
+; CHECK-NEXT:    [[LOAD47:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB48]]:
+; CHECK-NEXT:    [[LOAD49:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB50]]:
+; CHECK-NEXT:    [[LOAD51:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB52]]:
+; CHECK-NEXT:    [[LOAD53:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB54]]:
+; CHECK-NEXT:    [[LOAD55:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB56]]:
+; CHECK-NEXT:    [[LOAD57:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB58]]:
+; CHECK-NEXT:    [[LOAD59:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB60]]:
+; CHECK-NEXT:    [[LOAD61:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB62]]:
+; CHECK-NEXT:    [[LOAD63:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB64]]:
+; CHECK-NEXT:    [[LOAD65:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB66]]:
+; CHECK-NEXT:    [[LOAD67:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB68]]:
+; CHECK-NEXT:    [[LOAD69:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB70]]:
+; CHECK-NEXT:    [[LOAD71:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB72:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB142:.*]], label %[[BB79:.*]]
+; CHECK:       [[BB73]]:
+; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <2 x ptr addrspace(1)> <ptr addrspace(1) poison, ptr addrspace(1) null>, ptr addrspace(1) [[GETELEMENTPTR3]], i32 0
+; CHECK-NEXT:    br i1 false, label %[[BB146:.*]], label %[[BB74:.*]]
+; CHECK:       [[BB74]]:
+; CHECK-NEXT:    br i1 false, label %[[BB75:.*]], label %[[BB76:.*]]
+; CHECK:       [[BB75]]:
+; CHECK-NEXT:    br label %[[BB150]]
+; CHECK:       [[BB76]]:
+; CHECK-NEXT:    br i1 false, label %[[BB153:.*]], label %[[BB77:.*]]
+; CHECK:       [[BB77]]:
+; CHECK-NEXT:    [[LOAD78:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB79]]:
+; CHECK-NEXT:    br i1 false, label %[[BB146]], label %[[BB81:.*]]
+; CHECK:       [[BB80:.*]]:
+; CHECK-NEXT:    br label %[[BB150]]
+; CHECK:       [[BB81]]:
+; CHECK-NEXT:    [[LOAD82:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB83:.*]]:
+; CHECK-NEXT:    br label %[[BB138:.*]]
+; CHECK:       [[BB84:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB142]], label %[[BB85:.*]]
+; CHECK:       [[BB85]]:
+; CHECK-NEXT:    br i1 false, label %[[BB146]], label %[[BB86:.*]]
+; CHECK:       [[BB86]]:
+; CHECK-NEXT:    [[LOAD87:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB88:.*]]:
+; CHECK-NEXT:    br label %[[BB134:.*]]
+; CHECK:       [[BB89:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB138]], label %[[BB90:.*]]
+; CHECK:       [[BB90]]:
+; CHECK-NEXT:    br i1 false, label %[[BB142]], label %[[BB91:.*]]
+; CHECK:       [[BB91]]:
+; CHECK-NEXT:    [[LOAD92:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB93:.*]]:
+; CHECK-NEXT:    br label %[[BB130:.*]]
+; CHECK:       [[BB94:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB134]], label %[[BB95:.*]]
+; CHECK:       [[BB95]]:
+; CHECK-NEXT:    br i1 false, label %[[BB138]], label %[[BB96:.*]]
+; CHECK:       [[BB96]]:
+; CHECK-NEXT:    [[LOAD97:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB98:.*]]:
+; CHECK-NEXT:    br label %[[BB126:.*]]
+; CHECK:       [[BB99:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB130]], label %[[BB100:.*]]
+; CHECK:       [[BB100]]:
+; CHECK-NEXT:    br i1 false, label %[[BB134]], label %[[BB101:.*]]
+; CHECK:       [[BB101]]:
+; CHECK-NEXT:    [[LOAD102:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB103:.*]]:
+; CHECK-NEXT:    br label %[[BB124:.*]]
+; CHECK:       [[BB104:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB126]], label %[[BB105:.*]]
+; CHECK:       [[BB105]]:
+; CHECK-NEXT:    br i1 false, label %[[BB130]], label %[[BB106:.*]]
+; CHECK:       [[BB106]]:
+; CHECK-NEXT:    [[LOAD107:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB108:.*]]:
+; CHECK-NEXT:    br label %[[BB124]]
+; CHECK:       [[BB109:.*]]:
+; CHECK-NEXT:    br i1 false, label %[[BB126]], label %[[BB110:.*]]
+; CHECK:       [[BB110]]:
+; CHECK-NEXT:    [[LOAD111:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB112:.*]]:
+; CHECK-NEXT:    [[LOAD113:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    br label %[[BB124]]
+; CHECK:       [[BB114:.*:]]
+; CHECK-NEXT:    [[LOAD115:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB116:.*:]]
+; CHECK-NEXT:    [[LOAD117:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB118:.*:]]
+; CHECK-NEXT:    [[LOAD119:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB120:.*:]]
+; CHECK-NEXT:    [[LOAD121:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB122]]:
+; CHECK-NEXT:    [[LOAD123:%.*]] = load i8, ptr addrspace(1) [[GETELEMENTPTR3]], align 1
+; CHECK-NEXT:    ret i32 0
+; CHECK:       [[BB124]]:
+; CHECK-NEXT:    [[PHI:%.*]] = phi ptr addrspace(1) [ null, %[[BB112]] ], [ [[GETELEMENTPTR3]], %[[BB108]] ], [ null, %[[BB103]] ]
+; CHECK-NEXT:    [[PHI125:%.*]] = phi ptr addrspace(1) [ null, %[[BB112]] ], [ null, %[[BB108]] ], [ [[GETELEMENTPTR3]], %[[BB103]] ]
+; CHECK-NEXT:    br label %[[BB126]]
+; CHECK:       [[BB126]]:
+; CHECK-NEXT:    [[PHI127:%.*]] = phi ptr addrspace(1) [ null, %[[BB124]] ], [ null, %[[BB98]] ], [ null, %[[BB104]] ], [ [[GETELEMENTPTR3]], %[[BB109]] ]
+; CHECK-NEXT:    [[PHI128:%.*]] = phi ptr addrspace(1) [ null, %[[BB124]] ], [ null, %[[BB98]] ], [ [[GETELEMENTPTR3]], %[[BB104]] ], [ null, %[[BB109]] ]
+; CHECK-NEXT:    [[PHI129:%.*]] = phi ptr addrspace(1) [ null, %[[BB124]] ], [ [[GETELEMENTPTR3]], %[[BB98]] ], [ null, %[[BB104]] ], [ null, %[[BB109]] ]
+; CHECK-NEXT:    br label %[[BB130]]
+; CHECK:       [[BB130]]:
+; CHECK-NEXT:    [[PHI131:%.*]] = phi ptr addrspace(1) [ null, %[[BB126]] ], [ null, %[[BB93]] ], [ null, %[[BB99]] ], [ [[GETELEMENTPTR3]], %[[BB105]] ]
+; CHECK-NEXT:    [[PHI132:%.*]] = phi ptr addrspace(1) [ null, %[[BB126]] ], [ null, %[[BB93]] ], [ [[GETELEMENTPTR3]], %[[BB99]] ], [ null, %[[BB105]] ]
+; CHECK-NEXT:    [[PHI133:%.*]] = phi ptr addrspace(1) [ null, %[[BB126]] ], [ [[GETELEMENTPTR3]], %[[BB93]] ], [ null, %[[BB99]] ], [ null, %[[BB105]] ]
+; CHECK-NEXT:    br label %[[BB134]]
+; CHECK:       [[BB134]]:
+; CHECK-NEXT:    [[PHI135:%.*]] = phi ptr addrspace(1) [ null, %[[BB130]] ], [ null, %[[BB88]] ], [ null, %[[BB94]] ], [ [[GETELEMENTPTR3]], %[[BB100]] ]
+; CHECK-NEXT:    [[PHI136:%.*]] = phi ptr addrspace(1) [ null, %[[BB130]] ], [ null, %[[BB88]] ], [ [[GETELEMENTPTR3]], %[[BB94]] ], [ null, %[[BB100]] ]
+; CHECK-NEXT:    [[PHI137:%.*]] = phi ptr addrspace(1) [ null, %[[BB130]] ], [ [[GETELEMENTPTR3]], %[[BB88]] ], [ null, %[[BB94]] ], [ null, %[[BB100]] ]
+; CHECK-NEXT:    br label %[[BB138]]
+; CHECK:       [[BB138]]:
+; CHECK-NEXT:    [[PHI139:%.*]] = phi ptr addrspace(1) [ null, %[[BB134]] ], [ null, %[[BB83]] ], [ null, %[[BB89]] ], [ [[GETELEMENTPTR3]], %[[BB95]] ]
+; CHECK-NEXT:    [[PHI140:%.*]] = phi ptr addrspace(1) [ null, %[[BB134]] ], [ null, %[[BB83]] ], [ [[GETELEMENTPTR3]], %[[BB89]] ], [ null, %[[BB95]] ]
+; CHECK-NEXT:    [[PHI141:%.*]] = phi ptr addrspace(1) [ null, %[[BB134]] ], [ [[GETELEMENTPTR3]], %[[BB83]] ], [ null, %[[BB89]] ], [ null, %[[BB95]] ]
+; CHECK-NEXT:    br label %[[BB142]]
+; CHECK:       [[BB142]]:
+; CHECK-NEXT:    [[PHI143:%.*]] = phi ptr addrspace(1) [ null, %[[BB138]] ], [ null, %[[BB72]] ], [ null, %[[BB84]] ], [ [[GETELEMENTPTR3]], %[[BB90]] ]
+; CHECK-NEXT:    [[PHI144:%.*]] = phi ptr addrspace(1) [ null, %[[BB138]] ], [ null, %[[BB72]] ], [ [[GETELEMENTPTR3]], %[[BB84]] ], [ null, %[[BB90]] ]
+; CHECK-NEXT:    [[PHI145:%.*]] = phi ptr addrspace(1) [ null, %[[BB138]] ], [ [[GETELEMENTPTR3]], %[[BB72]] ], [ null, %[[BB84]] ], [ null, %[[BB90]] ]
+; CHECK-NEXT:    br label %[[BB146]]
+; CHECK:       [[BB146]]:
+; CHECK-NEXT:    [[PHI147:%.*]] = phi ptr addrspace(1) [ null, %[[BB142]] ], [ null, %[[BB73]] ], [ null, %[[BB79]] ], [ [[GETELEMENTPTR3]], %[[BB85]] ]
+; CHECK-NEXT:    [[TMP5:%.*]] = phi <2 x ptr addrspace(1)> [ poison, %[[BB142]] ], [ [[TMP4]], %[[BB73]] ], [ poison, %[[BB79]] ], [ poison, %[[BB85]] ]
+; CHECK-NEXT:    br label %[[BB150]]
+; CHECK:       [[BB150]]:
+; CHECK-NEXT:    [[TMP6:%.*]] = phi <2 x ptr addrspace(1)> [ [[TMP2]], %[[BB75]] ], [ poison, %[[BB80]] ], [ zeroinitializer, %[[BB146]] ], [ [[TMP3]], %[[BB1]] ]
+; CHECK-NEXT:    br label %[[BB153]]
+; CHECK:       [[BB153]]:
+; CHECK-NEXT:    [[PHI154:%.*]] = phi ptr addrspace(1) [ null, %[[BB150]] ], [ [[GETELEMENTPTR3]], %[[BB76]] ]
+; CHECK-NEXT:    ret i32 0
+;
+bb:
+  br label %bb1
+
+bb1:                                              ; preds = %bb
+  %getelementptr = getelementptr i8, ptr addrspace(1) %arg, i64 20
+  %getelementptr2 = getelementptr i8, ptr addrspace(1) %arg, i64 21
+  %getelementptr3 = getelementptr i8, ptr addrspace(1) %arg, i64 22
+  br i1 false, label %bb73, label %bb150
+bb4:                                              ; No predecessors!
+  br i1 false, label %bb68, label %bb70
+bb5:                                              ; No predecessors!
+  br i1 false, label %bb64, label %bb66
+bb6:                                              ; No predecessors!
+  br i1 false, label %bb60, label %bb62
+bb7:                                              ; No predecessors!
+  br i1 false, label %bb8, label %bb58
+bb8:                                              ; preds = %bb7
+  br i1 false, label %bb54, label %bb56
+bb9:                                              ; No predecessors!
+  br i1 false, label %bb50, label %bb52
+bb10:                                             ; No predecessors!
+  br i1 false, label %bb46, label %bb48
+bb11:                                             ; No predecessors!
+  br i1 false, label %bb42, label %bb44
+bb12:                                             ; No predecessors!
+  br i1 false, label %bb38, label %bb40
+bb13:                                             ; No predecessors!
+  br i1 false, label %bb36, label %bb122
+bb14:                                             ; No predecessors!
+  br i1 false, label %bb32, label %bb34
+bb15:                                             ; No predecessors!
+  br i1 false, label %bb28, label %bb30
+bb16:                                             ; No predecessors!
+  br i1 false, label %bb17, label %bb26
+bb17:                                             ; preds = %bb16
+  br i1 false, label %bb22, label %bb24
+bb18:                                             ; No predecessors!
+  br i1 false, label %bb19, label %bb20
+bb19:                                             ; preds = %bb18
+  %load = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb20:                                             ; preds = %bb18
+  %load21 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb22:                                             ; preds = %bb17
+  %load23 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb24:                                             ; preds = %bb17
+  %load25 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb26:                                             ; preds = %bb16
+  %load27 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb28:                                             ; preds = %bb15
+  %load29 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb30:                                             ; preds = %bb15
+  %load31 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb32:                                             ; preds = %bb14
+  %load33 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb34:                                             ; preds = %bb14
+  %load35 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb36:                                             ; preds = %bb13
+  %load37 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb38:                                             ; preds = %bb12
+  %load39 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb40:                                             ; preds = %bb12
+  %load41 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb42:                                             ; preds = %bb11
+  %load43 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb44:                                             ; preds = %bb11
+  %load45 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb46:                                             ; preds = %bb10
+  %load47 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb48:                                             ; preds = %bb10
+  %load49 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb50:                                             ; preds = %bb9
+  %load51 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb52:                                             ; preds = %bb9
+  %load53 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb54:                                             ; preds = %bb8
+  %load55 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb56:                                             ; preds = %bb8
+  %load57 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb58:                                             ; preds = %bb7
+  %load59 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb60:                                             ; preds = %bb6
+  %load61 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb62:                                             ; preds = %bb6
+  %load63 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb64:                                             ; preds = %bb5
+  %load65 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb66:                                             ; preds = %bb5
+  %load67 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb68:                                             ; preds = %bb4
+  %load69 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb70:                                             ; preds = %bb4
+  %load71 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb72:                                             ; No predecessors!
+  br i1 false, label %bb142, label %bb79
+bb73:                                             ; preds = %bb1
+  br i1 false, label %bb146, label %bb74
+bb74:                                             ; preds = %bb73
+  br i1 false, label %bb75, label %bb76
+bb75:                                             ; preds = %bb74
+  br label %bb150
+bb76:                                             ; preds = %bb74
+  br i1 false, label %bb153, label %bb77
+bb77:                                             ; preds = %bb76
+  %load78 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb79:                                             ; preds = %bb72
+  br i1 false, label %bb146, label %bb81
+bb80:                                             ; No predecessors!
+  br label %bb150
+bb81:                                             ; preds = %bb79
+  %load82 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb83:                                             ; No predecessors!
+  br label %bb138
+bb84:                                             ; No predecessors!
+  br i1 false, label %bb142, label %bb85
+bb85:                                             ; preds = %bb84
+  br i1 false, label %bb146, label %bb86
+bb86:                                             ; preds = %bb85
+  %load87 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb88:                                             ; No predecessors!
+  br label %bb134
+bb89:                                             ; No predecessors!
+  br i1 false, label %bb138, label %bb90
+bb90:                                             ; preds = %bb89
+  br i1 false, label %bb142, label %bb91
+bb91:                                             ; preds = %bb90
+  %load92 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb93:                                             ; No predecessors!
+  br label %bb130
+bb94:                                             ; No predecessors!
+  br i1 false, label %bb134, label %bb95
+bb95:                                             ; preds = %bb94
+  br i1 false, label %bb138, label %bb96
+bb96:                                             ; preds = %bb95
+  %load97 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb98:                                             ; No predecessors!
+  br label %bb126
+bb99:                                             ; No predecessors!
+  br i1 false, label %bb130, label %bb100
+bb100:                                            ; preds = %bb99
+  br i1 false, label %bb134, label %bb101
+bb101:                                            ; preds = %bb100
+  %load102 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb103:                                            ; No predecessors!
+  br label %bb124
+bb104:                                            ; No predecessors!
+  br i1 false, label %bb126, label %bb105
+bb105:                                            ; preds = %bb104
+  br i1 false, label %bb130, label %bb106
+bb106:                                            ; preds = %bb105
+  %load107 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb108:                                            ; No predecessors!
+  br label %bb124
+bb109:                                            ; No predecessors!
+  br i1 false, label %bb126, label %bb110
+bb110:                                            ; preds = %bb109
+  %load111 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb112:                                            ; No predecessors!
+  %load113 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  br label %bb124
+bb114:                                            ; No predecessors!
+  %load115 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb116:                                            ; No predecessors!
+  %load117 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb118:                                            ; No predecessors!
+  %load119 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb120:                                            ; No predecessors!
+  %load121 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+bb122:                                            ; preds = %bb13
+  %load123 = load i8, ptr addrspace(1) %getelementptr3, align 1
+  ret i32 0
+
+bb124:                                            ; preds = %bb112, %bb108, %bb103
+  %phi = phi ptr addrspace(1) [ null, %bb112 ], [ %getelementptr3, %bb108 ], [ null, %bb103 ]
+  %phi125 = phi ptr addrspace(1) [ null, %bb112 ], [ null, %bb108 ], [ %getelementptr3, %bb103 ]
+  br label %bb126
+
+bb126:                                            ; preds = %bb124, %bb109, %bb104, %bb98
+  %phi127 = phi ptr addrspace(1) [ null, %bb124 ], [ null, %bb98 ], [ null, %bb104 ], [ %getelementptr3, %bb109 ]
+  %phi128 = phi ptr addrspace(1) [ null, %bb124 ], [ null, %bb98 ], [ %getelementptr3, %bb104 ], [ null, %bb109 ]
+  %phi129 = phi ptr addrspace(1) [ null, %bb124 ], [ %getelementptr3, %bb98 ], [ null, %bb104 ], [ null, %bb109 ]
+  br label %bb130
+
+bb130:                                            ; preds = %bb126, %bb105, %bb99, %bb93
+  %phi131 = phi ptr addrspace(1) [ null, %bb126 ], [ null, %bb93 ], [ null, %bb99 ], [ %getelementptr3, %bb105 ]
+  %phi132 = phi ptr addrspace(1) [ null, %bb126 ], [ null, %bb93 ], [ %getelementptr3, %bb99 ], [ null, %bb105 ]
+  %phi133 = phi ptr addrspace(1) [ null, %bb126 ], [ %getelementptr3, %bb93 ], [ null, %bb99 ], [ null, %bb105 ]
+  br label %bb134
+
+bb134:                                            ; preds = %bb130, %bb100, %bb94, %bb88
+  %phi135 = phi ptr addrspace(1) [ null, %bb130 ], [ null, %bb88 ], [ null, %bb94 ], [ %getelementptr3, %bb100 ]
+  %phi136 = phi ptr addrspace(1) [ null, %bb130 ], [ null, %bb88 ], [ %getelementptr3, %bb94 ], [ null, %bb100 ]
+  %phi137 = phi ptr addrspace(1) [ null, %bb130 ], [ %getelementptr3, %bb88 ], [ null, %bb94 ], [ null, %bb100 ]
+  br label %bb138
+
+bb138:                                            ; preds = %bb134, %bb95, %bb89, %bb83
+  %phi139 = phi ptr addrspace(1) [ null, %bb134 ], [ null, %bb83 ], [ null, %bb89 ], [ %getelementptr3, %bb95 ]
+  %phi140 = phi ptr addrspace(1) [ null, %bb134 ], [ null, %bb83 ], [ %getelementptr3, %bb89 ], [ null, %bb95 ]
+  %phi141 = phi ptr addrspace(1) [ null, %bb134 ], [ %getelementptr3, %bb83 ], [ null, %bb89 ], [ null, %bb95 ]
+  br label %bb142
+
+bb142:                                            ; preds = %bb138, %bb90, %bb84, %bb72
+  %phi143 = phi ptr addrspace(1) [ null, %bb138 ], [ null, %bb72 ], [ null, %bb84 ], [ %getelementptr3, %bb90 ]
+  %phi144 = phi ptr addrspace(1) [ null, %bb138 ], [ null, %bb72 ], [ %getelementptr3, %bb84 ], [ null, %bb90 ]
+  %phi145 = phi ptr addrspace(1) [ null, %bb138 ], [ %getelementptr3, %bb72 ], [ null, %bb84 ], [ null, %bb90 ]
+  br label %bb146
+
+bb146:                                            ; preds = %bb142, %bb85, %bb79, %bb73
+  %phi147 = phi ptr addrspace(1) [ null, %bb142 ], [ null, %bb73 ], [ null, %bb79 ], [ %getelementptr3, %bb85 ]
+  %phi148 = phi ptr addrspace(1) [ null, %bb142 ], [ null, %bb73 ], [ %getelementptr3, %bb79 ], [ null, %bb85 ]
+  %phi149 = phi ptr addrspace(1) [ null, %bb142 ], [ %getelementptr3, %bb73 ], [ null, %bb79 ], [ null, %bb85 ]
+  br label %bb150
+
+bb150:                                            ; preds = %bb146, %bb80, %bb75, %bb1
+  %phi151 = phi ptr addrspace(1) [ %getelementptr2, %bb75 ], [ %getelementptr3, %bb80 ], [ null, %bb146 ], [ %getelementptr, %bb1 ]
+  %phi152 = phi ptr addrspace(1) [ %getelementptr3, %bb75 ], [ null, %bb80 ], [ null, %bb146 ], [ %getelementptr2, %bb1 ]
+  br label %bb153
+
+bb153:                                            ; preds = %bb150, %bb76
+  %phi154 = phi ptr addrspace(1) [ null, %bb150 ], [ %getelementptr3, %bb76 ]
+  ret i32 0
+}
+


        


More information about the llvm-commits mailing list