[llvm] r326037 - Revert "StructurizeCFG: Test for branch divergence correctly"

Adam Nemet via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 24 09:29:10 PST 2018


Author: anemet
Date: Sat Feb 24 09:29:09 2018
New Revision: 326037

URL: http://llvm.org/viewvc/llvm-project?rev=326037&view=rev
Log:
Revert "StructurizeCFG: Test for branch divergence correctly"

This reverts commit r325881.

Breaks many bots

Removed:
    llvm/trunk/test/Transforms/StructurizeCFG/AMDGPU/uniform-regions.ll
Modified:
    llvm/trunk/include/llvm/Analysis/DivergenceAnalysis.h
    llvm/trunk/lib/Transforms/Scalar/StructurizeCFG.cpp
    llvm/trunk/test/CodeGen/AMDGPU/control-flow-optnone.ll

Modified: llvm/trunk/include/llvm/Analysis/DivergenceAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DivergenceAnalysis.h?rev=326037&r1=326036&r2=326037&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/DivergenceAnalysis.h (original)
+++ llvm/trunk/include/llvm/Analysis/DivergenceAnalysis.h Sat Feb 24 09:29:09 2018
@@ -35,16 +35,10 @@ public:
   // Print all divergent branches in the function.
   void print(raw_ostream &OS, const Module *) const override;
 
-  // Returns true if V is divergent at its definition.
-  //
-  // Even if this function returns false, V may still be divergent when used
-  // in a different basic block.
+  // Returns true if V is divergent.
   bool isDivergent(const Value *V) const { return DivergentValues.count(V); }
 
   // Returns true if V is uniform/non-divergent.
-  //
-  // Even if this function returns true, V may still be divergent when used
-  // in a different basic block.
   bool isUniform(const Value *V) const { return !isDivergent(V); }
 
 private:

Modified: llvm/trunk/lib/Transforms/Scalar/StructurizeCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/StructurizeCFG.cpp?rev=326037&r1=326036&r2=326037&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/StructurizeCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/StructurizeCFG.cpp Sat Feb 24 09:29:09 2018
@@ -55,12 +55,6 @@ static const char *const FlowBlockName =
 
 namespace {
 
-static cl::opt<bool> ForceSkipUniformRegions(
-  "structurizecfg-skip-uniform-regions",
-  cl::Hidden,
-  cl::desc("Force whether the StructurizeCFG pass skips uniform regions"),
-  cl::init(false));
-
 // Definition of the complex types used in this pass.
 
 using BBValuePair = std::pair<BasicBlock *, Value *>;
@@ -248,11 +242,8 @@ class StructurizeCFG : public RegionPass
 public:
   static char ID;
 
-  explicit StructurizeCFG(bool SkipUniformRegions_ = false)
-      : RegionPass(ID),
-        SkipUniformRegions(SkipUniformRegions_) {
-    if (ForceSkipUniformRegions.getNumOccurrences())
-      SkipUniformRegions = ForceSkipUniformRegions.getValue();
+  explicit StructurizeCFG(bool SkipUniformRegions = false)
+      : RegionPass(ID), SkipUniformRegions(SkipUniformRegions) {
     initializeStructurizeCFGPass(*PassRegistry::getPassRegistry());
   }
 
@@ -894,7 +885,7 @@ static bool hasOnlyUniformBranches(const
     if (!Br || !Br->isConditional())
       continue;
 
-    if (!DA.isUniform(Br))
+    if (!DA.isUniform(Br->getCondition()))
       return false;
     DEBUG(dbgs() << "BB: " << BB->getName() << " has uniform terminator\n");
   }

Modified: llvm/trunk/test/CodeGen/AMDGPU/control-flow-optnone.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/control-flow-optnone.ll?rev=326037&r1=326036&r2=326037&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/control-flow-optnone.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/control-flow-optnone.ll Sat Feb 24 09:29:09 2018
@@ -15,8 +15,8 @@
 ; GCN: s_mov_b64 exec
 
 ; GCN: s_or_b64 exec, exec
-; GCN: s_cmp_eq_u32
-; GCN: s_cbranch_scc1
+; GCN: v_cmp_eq_u32
+; GCN: s_cbranch_vccnz
 ; GCN-NEXT: s_branch
 define amdgpu_kernel void @copytoreg_divergent_brcond(i32 %arg, i32 %arg1, i32 %arg2) #0 {
 bb:

Removed: llvm/trunk/test/Transforms/StructurizeCFG/AMDGPU/uniform-regions.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/StructurizeCFG/AMDGPU/uniform-regions.ll?rev=326036&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/StructurizeCFG/AMDGPU/uniform-regions.ll (original)
+++ llvm/trunk/test/Transforms/StructurizeCFG/AMDGPU/uniform-regions.ll (removed)
@@ -1,82 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -mtriple=amdgcn-- -S -o - -structurizecfg -structurizecfg-skip-uniform-regions < %s | FileCheck %s
-
-define amdgpu_cs void @uniform(i32 inreg %v) {
-; CHECK-LABEL: @uniform(
-; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CC:%.*]] = icmp eq i32 [[V:%.*]], 0
-; CHECK-NEXT:    br i1 [[CC]], label [[IF:%.*]], label [[END:%.*]], !structurizecfg.uniform !0
-; CHECK:       if:
-; CHECK-NEXT:    br label [[END]], !structurizecfg.uniform !0
-; CHECK:       end:
-; CHECK-NEXT:    ret void
-;
-entry:
-  %cc = icmp eq i32 %v, 0
-  br i1 %cc, label %if, label %end
-
-if:
-  br label %end
-
-end:
-  ret void
-}
-
-define amdgpu_cs void @nonuniform(i32 addrspace(2)* %ptr) {
-; CHECK-LABEL: @nonuniform(
-; CHECK-NEXT:  entry:
-; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
-; CHECK:       for.body:
-; CHECK-NEXT:    [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[TMP0:%.*]], [[FLOW:%.*]] ]
-; CHECK-NEXT:    [[CC:%.*]] = icmp ult i32 [[I]], 4
-; CHECK-NEXT:    br i1 [[CC]], label [[MID_LOOP:%.*]], label [[FLOW]]
-; CHECK:       mid.loop:
-; CHECK-NEXT:    [[V:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
-; CHECK-NEXT:    [[CC2:%.*]] = icmp eq i32 [[V]], 0
-; CHECK-NEXT:    br i1 [[CC2]], label [[END_LOOP:%.*]], label [[FLOW1:%.*]]
-; CHECK:       Flow:
-; CHECK-NEXT:    [[TMP0]] = phi i32 [ [[TMP2:%.*]], [[FLOW1]] ], [ undef, [[FOR_BODY]] ]
-; CHECK-NEXT:    [[TMP1:%.*]] = phi i1 [ [[TMP3:%.*]], [[FLOW1]] ], [ true, [[FOR_BODY]] ]
-; CHECK-NEXT:    br i1 [[TMP1]], label [[FOR_END:%.*]], label [[FOR_BODY]]
-; CHECK:       end.loop:
-; CHECK-NEXT:    [[I_INC:%.*]] = add i32 [[I]], 1
-; CHECK-NEXT:    br label [[FLOW1]]
-; CHECK:       Flow1:
-; CHECK-NEXT:    [[TMP2]] = phi i32 [ [[I_INC]], [[END_LOOP]] ], [ undef, [[MID_LOOP]] ]
-; CHECK-NEXT:    [[TMP3]] = phi i1 [ false, [[END_LOOP]] ], [ true, [[MID_LOOP]] ]
-; CHECK-NEXT:    br label [[FLOW]]
-; CHECK:       for.end:
-; CHECK-NEXT:    br i1 [[CC]], label [[IF:%.*]], label [[END:%.*]]
-; CHECK:       if:
-; CHECK-NEXT:    br label [[END]]
-; CHECK:       end:
-; CHECK-NEXT:    ret void
-;
-entry:
-  br label %for.body
-
-for.body:
-  %i = phi i32 [0, %entry], [%i.inc, %end.loop]
-  %cc = icmp ult i32 %i, 4
-  br i1 %cc, label %mid.loop, label %for.end
-
-mid.loop:
-  %v = call i32 @llvm.amdgcn.workitem.id.x()
-  %cc2 = icmp eq i32 %v, 0
-  br i1 %cc2, label %end.loop, label %for.end
-
-end.loop:
-  %i.inc = add i32 %i, 1
-  br label %for.body
-
-for.end:
-  br i1 %cc, label %if, label %end
-
-if:
-  br label %end
-
-end:
-  ret void
-}
-
-declare i32 @llvm.amdgcn.workitem.id.x()




More information about the llvm-commits mailing list