[lunarglass] r1094 committed - GLSL AST -> Top IR: Correctly handle continue to end-test in a do-whil...

1 view
Skip to first unread message

lunar...@googlecode.com

unread,
Jul 9, 2015, 3:02:21 PM7/9/15
to lunargla...@googlegroups.com
Revision: 1094
Author: jo...@lunarg.com
Date: Thu Jul 9 19:01:49 2015 UTC
Log: GLSL AST -> Top IR: Correctly handle continue to end-test in a
do-while loop.
https://code.google.com/p/lunarglass/source/detail?r=1094

Modified:
/trunk/Core/TopBuilder.cpp
/trunk/Core/TopBuilder.h
/trunk/Frontends/glslang/GlslangToTopVisitor.cpp
/trunk/test/baseResults/dataOutIndirect.vert.out
/trunk/test/baseResults/doWhileLoop.frag.out
/trunk/test/baseResults/forLoop.frag.out
/trunk/test/baseResults/localAggregates.frag.out
/trunk/test/baseResults/loops.frag.out
/trunk/test/baseResults/loopsArtificial.frag.out
/trunk/test/baseResults/noUnroll.out
/trunk/test/baseResults/switch.frag.out
/trunk/test/baseResults/whileLoop.frag.out

=======================================
--- /trunk/Core/TopBuilder.cpp Mon May 25 23:01:59 2015 UTC
+++ /trunk/Core/TopBuilder.cpp Thu Jul 9 19:01:49 2015 UTC
@@ -2603,8 +2603,8 @@
llvm::BasicBlock *headerBB =
llvm::BasicBlock::Create(context, "loop-header", function);
llvm::BasicBlock *mergeBB =
llvm::BasicBlock::Create(context, "loop-merge");

- LoopData ld = { };
- ld.exit = mergeBB;
+ LoopData ld;
+ ld.exit = mergeBB;
ld.header = headerBB;
ld.counter = inductiveVariable;
ld.finish = finish;
@@ -2632,25 +2632,81 @@
builder.SetInsertPoint(headerBB);
}

-// Add a back-edge (e.g "continue") for the innermost loop that you're in
+// Comments in header
+void Builder::makeLoopTest(llvm::Value* condition)
+{
+ if (builder.GetInsertBlock()->getTerminator())
+ return;
+
+ LoopData& loop = loops.top();
+ if (loop.endTest) {
+ assert(loop.body);
+ builder.CreateCondBr(condition, loop.endTestBody, loop.exit);
+ // depending on closeLoop() to fix the insert point
+ } else {
+ condition = builder.CreateNot(condition);
+ gla::Builder::If ifBuilder(condition, this);
+ makeLoopExit();
+ ifBuilder.makeEndIf();
+ }
+}
+
+// Comments in header
+void Builder::completeLoopHeaderWithoutTest()
+{
+ assert(loop.endTest == nullptr);
+
+ LoopData& loop = loops.top();
+ llvm::Function* function = builder.GetInsertBlock()->getParent();
+
+ loop.endTest = llvm::BasicBlock::Create(context, "loop-test");
+ loop.endTestBody = llvm::BasicBlock::Create(context, "loop-body",
function);
+
+ // Branch to the loop's body
+ if (! builder.GetInsertBlock()->getTerminator())
+ builder.CreateBr(loop.endTestBody);
+ builder.SetInsertPoint(loop.endTestBody);
+}
+
+// Comments in header
+void Builder::makeBranchToLoopEndTest()
+{
+ LoopData& loop = loops.top();
+ assert(loop.endTest != nullptr);
+
+ // branch to the loop's test
+ if (! builder.GetInsertBlock()->getTerminator())
+ builder.CreateBr(loop.endTest);
+
+ llvm::Function* function = builder.GetInsertBlock()->getParent();
+ function->getBasicBlockList().push_back(loop.endTest);
+ builder.SetInsertPoint(loop.endTest);
+}
+
+// Add a back-edge (e.g "continue") for the innermost loop
void Builder::makeLoopBackEdge(bool implicit)
{
if (builder.GetInsertBlock()->getTerminator())
return;

- LoopData ld = loops.top();
+ LoopData& ld = loops.top();

- // If we're not inductive, just branch back.
+ // If we're not inductive, just branch back to the header, or test,
depending on loop topology.
if (! ld.isInductive) {
- if (builder.GetInsertBlock()->getTerminator())
- return;
+ if (ld.endTest)
+ builder.CreateBr(ld.endTest);
+ else
+ builder.CreateBr(ld.header);

- builder.CreateBr(ld.header);
+ // Set up a block for dead code.
if (! implicit && insertNoPredecessorBlocks)
createAndSetNoPredecessorBlock("post-loop-continue");

return;
}
+
+ // "do-while" is mutually exclusive with "inductive"
+ assert(ld.endTest == nullptr);

// Otherwise we have to (possibly) increment the inductive variable,
and
// set up a conditional exit.
@@ -2700,15 +2756,17 @@
createAndSetNoPredecessorBlock("post-loop-break");
}

-// Close the innermost loop that you're in
+// Close the innermost loop
void Builder::closeLoop()
{
- if (! builder.GetInsertBlock()->getTerminator()) {
+ LoopData& ld = loops.top();
+
+ // a loop with the test at the end already got the final branching in
place during makeLoopTest()
+ if (ld.endTest == nullptr) {
// Branch back through the loop
- makeLoopBackEdge(true);
+ if (! builder.GetInsertBlock()->getTerminator())
+ makeLoopBackEdge(true);
}
-
- LoopData ld = loops.top();

ld.function->getBasicBlockList().push_back(ld.exit);
builder.SetInsertPoint(ld.exit);
=======================================
--- /trunk/Core/TopBuilder.h Mon May 25 23:01:59 2015 UTC
+++ /trunk/Core/TopBuilder.h Thu Jul 9 19:01:49 2015 UTC
@@ -454,6 +454,19 @@
void makeNewLoop(llvm::Value* inductiveVariable, llvm::Constant* from,
llvm::Constant* finish,
llvm::Constant* increment, bool
builderDoesIncrement);

+ // Given an already computed 'condition' for loop continuance (loop
test), generate
+ // the right branching (loop-topology dependent) for the loop test.
+ void makeLoopTest(llvm::Value* condition);
+
+ // For do-while stlye loop topology that has the test at the end,
force conclusion of the
+ // header and beginning of the body. Will make the block for the
test, so continue
+ // (makeLoopBackEdge) has something to branch to.
+ void completeLoopHeaderWithoutTest();
+
+ // For do-while stlye loop topology that has the test at the end,
force conclusing of the
+ // body and branch to the test at the end of the loop.
+ void makeBranchToLoopEndTest();
+
// Add a back-edge (e.g "continue") for the innermost loop that you're
in
void makeLoopBackEdge(bool implicit=false);

@@ -512,6 +525,9 @@

// Data that needs to be kept in order to properly handle loops.
struct LoopData {
+ LoopData() : header(nullptr), exit(nullptr), function(nullptr),
isInductive(false), builderDoesIncrement(false), counter(nullptr),
finish(nullptr),
+ increment(nullptr), endTest(nullptr),
endTestBody(nullptr) { }
+
llvm::BasicBlock* header;
llvm::BasicBlock* exit;

@@ -523,6 +539,8 @@
llvm::Value* counter;
llvm::Constant* finish;
llvm::Constant* increment;
+ llvm::BasicBlock* endTest; // only used for non-inductive
loops, e.g., a do-while with the test at the end
+ llvm::BasicBlock* endTestBody; // only used in conjuction with
endTest, otherwise, the body is not a tracked branch target
};

// Our loop stack.
=======================================
--- /trunk/Frontends/glslang/GlslangToTopVisitor.cpp Mon May 25 23:01:59
2015 UTC
+++ /trunk/Frontends/glslang/GlslangToTopVisitor.cpp Thu Jul 9 19:01:49
2015 UTC
@@ -1319,26 +1319,21 @@

bool bodyOut = false;
if (! node->testFirst()) {
+ glaBuilder->completeLoopHeaderWithoutTest();
if (node->getBody()) {
breakForLoop.push(true);
node->getBody()->traverse(this);
breakForLoop.pop();
}
bodyOut = true;
+ glaBuilder->makeBranchToLoopEndTest();
}

if (node->getTest()) {
- node->getTest()->traverse(this);
// the AST only contained the test, not the branch, we have to add
it
-
- // make the following
- // if (! condition from test traversal)
- // break;
+ node->getTest()->traverse(this);
llvm::Value* condition =
glaBuilder->accessChainLoad(GetMdPrecision(node->getTest()->getType()));
- condition = llvmBuilder.CreateNot(condition);
- gla::Builder::If ifBuilder(condition, glaBuilder);
- glaBuilder->makeLoopExit();
- ifBuilder.makeEndIf();
+ glaBuilder->makeLoopTest(condition);
}

if (! bodyOut && node->getBody()) {
@@ -1350,7 +1345,6 @@
if (loopTerminal.top())
loopTerminal.top()->traverse(this);

- glaBuilder->makeLoopBackEdge();
glaBuilder->closeLoop();

loopTerminal.pop();
=======================================
--- /trunk/test/baseResults/dataOutIndirect.vert.out Thu May 21 01:11:19
2015 UTC
+++ /trunk/test/baseResults/dataOutIndirect.vert.out Thu Jul 9 19:01:49
2015 UTC
@@ -38,9 +38,6 @@
store i32 %i1, i32* %i
br label %loop-header

-post-loop-continue: ; No predecessors!
- unreachable
-
loop-merge: ; preds = %then
%gl_Position = load <4 x float>* getelementptr inbounds ([6 x <4 x
float>]* @colorOut, i32 0, i32 2)
store <4 x float> %gl_Position, <4 x float>* @gl_Position
=======================================
--- /trunk/test/baseResults/doWhileLoop.frag.out Thu May 21 01:11:19 2015
UTC
+++ /trunk/test/baseResults/doWhileLoop.frag.out Thu Jul 9 19:01:49 2015
UTC
@@ -17,31 +17,24 @@
store <4 x float> %color1, <4 x float>* %color
br label %loop-header

-loop-header: ; preds
= %ifmerge, %mainBody
+loop-header: ; preds = %mainBody
+ br label %loop-body
+
+loop-body: ; preds
= %loop-test, %loop-header
%0 = load <4 x float> addrspace(2)* @bigColor, !gla.uniform !3
%1 = load <4 x float>* %color
%color2 = fadd <4 x float> %1, %0
store <4 x float> %color2, <4 x float>* %color
+ br label %loop-test
+
+loop-test: ; preds = %loop-body
%2 = load <4 x float>* %color
%3 = extractelement <4 x float> %2, i32 0
%4 = load float addrspace(2)* @d, !gla.uniform !5
%5 = fcmp olt float %3, %4
- %6 = xor i1 %5, true
- br i1 %6, label %then, label %ifmerge
+ br i1 %5, label %loop-body, label %loop-merge

-then: ; preds = %loop-header
- br label %loop-merge
-
-post-loop-break: ; No predecessors!
- unreachable
-
-ifmerge: ; preds = %loop-header
- br label %loop-header
-
-post-loop-continue: ; No predecessors!
- unreachable
-
-loop-merge: ; preds = %then
+loop-merge: ; preds = %loop-test
%gl_FragColor = load <4 x float>* %color
store <4 x float> %gl_FragColor, <4 x float>* @gl_FragColor
br label %stage-epilogue
@@ -81,20 +74,20 @@
%color1 = load <4 x float>* @BaseColor, align 16
%.pre = load <4 x float> addrspace(2)* @bigColor, align
16, !gla.uniform !3
%.pre3 = load float addrspace(2)* @d, align 4, !gla.uniform !5
- br label %loop-header
+ br label %loop-body

-loop-header: ; preds
= %loop-header, %entry
- %color.0 = phi <4 x float> [ %color1, %entry ], [ %color2, %loop-header ]
+loop-body: ; preds
= %loop-body, %entry
+ %color.0 = phi <4 x float> [ %color1, %entry ], [ %color2, %loop-body ]
%color2 = fadd <4 x float> %color.0, %.pre
%0 = extractelement <4 x float> %color2, i32 0
- %1 = fcmp uge float %0, %.pre3
- br i1 %1, label %then, label %loop-header
+ %1 = fcmp olt float %0, %.pre3
+ br i1 %1, label %loop-body, label %loop-merge

-then: ; preds = %loop-header
+loop-merge: ; preds = %loop-body
store <4 x float> %color2, <4 x float>* @gl_FragColor, align 16
br label %stage-epilogue

-stage-epilogue: ; preds = %then
+stage-epilogue: ; preds = %loop-merge
br label %stage-exit

stage-exit: ; preds = %stage-epilogue
@@ -127,8 +120,8 @@
color = BaseColor;
while (true) {
color1 = bigColor + color;
- bool H_6ao87e = color1.x >= d;
- if (H_6ao87e) {
+ bool H_1v5ao91 = color1.x < d;
+ if (! H_1v5ao91) {
break;
}

@@ -152,8 +145,8 @@
color = BaseColor;
while (true) {
color1 = bigColor + color;
- bool H_6ao87e = color1.x < d;
- if (! H_6ao87e) {
+ bool H_6ao87e = color1.x >= d;
+ if (H_6ao87e) {
break;
}

=======================================
--- /trunk/test/baseResults/forLoop.frag.out Thu May 21 01:11:19 2015 UTC
+++ /trunk/test/baseResults/forLoop.frag.out Thu Jul 9 19:01:49 2015 UTC
@@ -11,12 +11,12 @@

define fastcc void @main() {
entry:
- %i35 = alloca i32
- %i25 = alloca i32
+ %i32 = alloca i32
+ %i23 = alloca i32
%r = alloca <4 x float>
- %gl_FragColor22 = alloca <4 x float>
+ %gl_FragColor20 = alloca <4 x float>
%tv4 = alloca <4 x float>
- %i13 = alloca i32
+ %i12 = alloca i32
%i4 = alloca i32
%sum = alloca float
%i = alloca i32
@@ -52,9 +52,6 @@
store i32 %i3, i32* %i
br label %loop-header

-post-loop-continue: ; No predecessors!
- unreachable
-
loop-merge: ; preds = %then
%gl_FragColor = load <4 x float>* %color
store <4 x float> %gl_FragColor, <4 x float>* @gl_FragColor
@@ -69,7 +66,7 @@
br i1 %9, label %then6, label %ifmerge8

then6: ; preds = %loop-header5
- br label %loop-merge12
+ br label %loop-merge11

post-loop-break7: ; No predecessors!
unreachable
@@ -87,46 +84,40 @@
store i32 %i410, i32* %i4
br label %loop-header5

-post-loop-continue11: ; No predecessors!
- unreachable
+loop-merge11: ; preds = %then6
+ store i32 0, i32* %i12
+ br label %loop-header13

-loop-merge12: ; preds = %then6
- store i32 0, i32* %i13
- br label %loop-header14
-
-loop-header14: ; preds
= %ifmerge17, %loop-merge12
- %16 = load i32* %i13
+loop-header13: ; preds
= %ifmerge16, %loop-merge11
+ %16 = load i32* %i12
%17 = icmp slt i32 %16, 4
%18 = xor i1 %17, true
- br i1 %18, label %then15, label %ifmerge17
+ br i1 %18, label %then14, label %ifmerge16

-then15: ; preds = %loop-header14
- br label %loop-merge21
+then14: ; preds = %loop-header13
+ br label %loop-merge19

-post-loop-break16: ; No predecessors!
+post-loop-break15: ; No predecessors!
unreachable

-ifmerge17: ; preds = %loop-header14
- %19 = load i32* %i13
- %20 = load i32* %i13
+ifmerge16: ; preds = %loop-header13
+ %19 = load i32* %i12
+ %20 = load i32* %i12
%21 = load <4 x i32> addrspace(2)* @v4, !gla.uniform !8
%22 = extractelement <4 x i32> %21, i32 %20
%23 = mul i32 %22, 4
%24 = uitofp i32 %23 to float
%25 = load <4 x float>* %tv4
- %tv418 = insertelement <4 x float> %25, float %24, i32 %19
- store <4 x float> %tv418, <4 x float>* %tv4
- %26 = load i32* %i13
- %i1319 = add i32 %26, 1
- store i32 %i1319, i32* %i13
- br label %loop-header14
+ %tv417 = insertelement <4 x float> %25, float %24, i32 %19
+ store <4 x float> %tv417, <4 x float>* %tv4
+ %26 = load i32* %i12
+ %i1218 = add i32 %26, 1
+ store i32 %i1218, i32* %i12
+ br label %loop-header13

-post-loop-continue20: ; No predecessors!
- unreachable
-
-loop-merge21: ; preds = %then15
+loop-merge19: ; preds = %then14
%27 = load float* %sum
- %28 = load <4 x float>* %gl_FragColor22
+ %28 = load <4 x float>* %gl_FragColor20
%29 = insertelement <4 x float> undef, float %27, i32 0
%30 = insertelement <4 x float> %29, float %27, i32 1
%31 = insertelement <4 x float> %30, float %27, i32 2
@@ -134,8 +125,8 @@
%33 = load <4 x float>* %tv4
%34 = fadd <4 x float> %32, %33
%35 = load <4 x float>* @gl_FragColor
- %gl_FragColor23 = fadd <4 x float> %35, %34
- store <4 x float> %gl_FragColor23, <4 x float>* @gl_FragColor
+ %gl_FragColor21 = fadd <4 x float> %35, %34
+ store <4 x float> %gl_FragColor21, <4 x float>* @gl_FragColor
%36 = load <4 x float>* @BaseColor
%37 = extractelement <4 x float> %36, i32 0
%38 = insertelement <3 x float> undef, float %37, i32 0
@@ -149,38 +140,35 @@
%46 = extractelement <3 x float> %42, i32 1
%47 = insertelement <4 x float> %45, float %46, i32 1
%48 = extractelement <3 x float> %42, i32 2
- %r24 = insertelement <4 x float> %47, float %48, i32 2
- store <4 x float> %r24, <4 x float>* %r
- store i32 0, i32* %i25
- br label %loop-header26
+ %r22 = insertelement <4 x float> %47, float %48, i32 2
+ store <4 x float> %r22, <4 x float>* %r
+ store i32 0, i32* %i23
+ br label %loop-header24

-loop-header26: ; preds
= %ifmerge29, %loop-merge21
- %49 = load i32* %i25
+loop-header24: ; preds
= %ifmerge27, %loop-merge19
+ %49 = load i32* %i23
%50 = load i32 addrspace(2)* @Count, !gla.uniform !5
%51 = icmp slt i32 %49, %50
%52 = xor i1 %51, true
- br i1 %52, label %then27, label %ifmerge29
+ br i1 %52, label %then25, label %ifmerge27

-then27: ; preds = %loop-header26
- br label %loop-merge33
+then25: ; preds = %loop-header24
+ br label %loop-merge30

-post-loop-break28: ; No predecessors!
+post-loop-break26: ; No predecessors!
unreachable

-ifmerge29: ; preds = %loop-header26
+ifmerge27: ; preds = %loop-header24
%53 = load float* @f
%54 = load <4 x float>* %r
- %r30 = insertelement <4 x float> %54, float %53, i32 3
- store <4 x float> %r30, <4 x float>* %r
- %55 = load i32* %i25
- %i2531 = add i32 %55, 1
- store i32 %i2531, i32* %i25
- br label %loop-header26
+ %r28 = insertelement <4 x float> %54, float %53, i32 3
+ store <4 x float> %r28, <4 x float>* %r
+ %55 = load i32* %i23
+ %i2329 = add i32 %55, 1
+ store i32 %i2329, i32* %i23
+ br label %loop-header24

-post-loop-continue32: ; No predecessors!
- unreachable
-
-loop-merge33: ; preds = %then27
+loop-merge30: ; preds = %then25
%56 = load <4 x float>* %r
%57 = extractelement <4 x float> %56, i32 0
%58 = insertelement <3 x float> undef, float %57, i32 0
@@ -202,44 +190,41 @@
%74 = extractelement <3 x float> %70, i32 1
%75 = insertelement <4 x float> %73, float %74, i32 1
%76 = extractelement <3 x float> %70, i32 2
- %gl_FragColor34 = insertelement <4 x float> %75, float %76, i32 2
- store <4 x float> %gl_FragColor34, <4 x float>* @gl_FragColor
- store i32 0, i32* %i35
- br label %loop-header36
+ %gl_FragColor31 = insertelement <4 x float> %75, float %76, i32 2
+ store <4 x float> %gl_FragColor31, <4 x float>* @gl_FragColor
+ store i32 0, i32* %i32
+ br label %loop-header33

-loop-header36: ; preds
= %ifmerge39, %loop-merge33
- %77 = load i32* %i35
+loop-header33: ; preds
= %ifmerge36, %loop-merge30
+ %77 = load i32* %i32
%78 = icmp slt i32 %77, 16
%79 = xor i1 %78, true
- br i1 %79, label %then37, label %ifmerge39
+ br i1 %79, label %then34, label %ifmerge36

-then37: ; preds = %loop-header36
- br label %loop-merge43
+then34: ; preds = %loop-header33
+ br label %loop-merge39

-post-loop-break38: ; No predecessors!
+post-loop-break35: ; No predecessors!
unreachable

-ifmerge39: ; preds = %loop-header36
+ifmerge36: ; preds = %loop-header33
%80 = load float* @f
%81 = load <4 x float>* @gl_FragColor
%82 = insertelement <4 x float> undef, float %80, i32 0
%83 = insertelement <4 x float> %82, float %80, i32 1
%84 = insertelement <4 x float> %83, float %80, i32 2
%85 = insertelement <4 x float> %84, float %80, i32 3
- %gl_FragColor40 = fmul <4 x float> %81, %85
- store <4 x float> %gl_FragColor40, <4 x float>* @gl_FragColor
- %86 = load i32* %i35
- %i3541 = add i32 %86, 4
- store i32 %i3541, i32* %i35
- br label %loop-header36
-
-post-loop-continue42: ; No predecessors!
- unreachable
+ %gl_FragColor37 = fmul <4 x float> %81, %85
+ store <4 x float> %gl_FragColor37, <4 x float>* @gl_FragColor
+ %86 = load i32* %i32
+ %i3238 = add i32 %86, 4
+ store i32 %i3238, i32* %i32
+ br label %loop-header33

-loop-merge43: ; preds = %then37
+loop-merge39: ; preds = %then34
br label %stage-epilogue

-stage-epilogue: ; preds = %loop-merge43
+stage-epilogue: ; preds = %loop-merge39
br label %stage-exit

stage-exit: ; preds = %stage-epilogue
@@ -307,56 +292,56 @@
%13 = shl i32 %4, 2
%14 = uitofp i32 %13 to float
%aggregate = load <4 x float>* @gla_globalAgg
- %tv418 = insertelement <4 x float> %aggregate, float %14, i32 0
+ %tv417 = insertelement <4 x float> %aggregate, float %14, i32 0
%15 = shl i32 %6, 2
%16 = uitofp i32 %15 to float
- %tv418.1 = insertelement <4 x float> %tv418, float %16, i32 1
+ %tv417.1 = insertelement <4 x float> %tv417, float %16, i32 1
%17 = shl i32 %8, 2
%18 = uitofp i32 %17 to float
- %tv418.2 = insertelement <4 x float> %tv418.1, float %18, i32 2
+ %tv417.2 = insertelement <4 x float> %tv417.1, float %18, i32 2
%19 = shl i32 %10, 2
%20 = uitofp i32 %19 to float
- %tv418.3 = insertelement <4 x float> %tv418.2, float %20, i32 3
- %21 = fadd <4 x float> %12, %tv418.3
- %gl_FragColor23 = fadd <4 x float> %21, %1
- %22 = call <3 x float> @llvm.gla.fSwizzle.v3f32.v4f32.v3i32(<4 x
float> %gl_FragColor23, <3 x i32> <i32 0, i32 1, i32 2>)
- store <4 x float> %gl_FragColor23, <4 x float>* @gl_FragColor, align 16
+ %tv417.3 = insertelement <4 x float> %tv417.2, float %20, i32 3
+ %21 = fadd <4 x float> %12, %tv417.3
+ %gl_FragColor21 = fadd <4 x float> %21, %1
+ %22 = call <3 x float> @llvm.gla.fSwizzle.v3f32.v4f32.v3i32(<4 x
float> %gl_FragColor21, <3 x i32> <i32 0, i32 1, i32 2>)
+ store <4 x float> %gl_FragColor21, <4 x float>* @gl_FragColor, align 16
%23 = load float* @f, align 4
%24 = call <4 x float> @llvm.gla.fSwizzle.v4f32.f32.v4i32(float %23, <4
x i32> zeroinitializer)
- br label %loop-header26
+ br label %loop-header24

ifmerge: ; preds = %loop-header
%color2 = fadd <4 x float> %1, %0
%i3 = add i32 %i.0, 1
br label %loop-header

-loop-header26: ; preds
= %ifmerge29, %then
- %r.0 = phi <4 x float> [ %color1, %then ], [ %29, %ifmerge29 ]
- %i25.0 = phi i32 [ 0, %then ], [ %i2531, %ifmerge29 ]
+loop-header24: ; preds
= %ifmerge27, %then
+ %r.0 = phi <4 x float> [ %color1, %then ], [ %29, %ifmerge27 ]
+ %i23.0 = phi i32 [ 0, %then ], [ %i2329, %ifmerge27 ]
%25 = call <3 x float> @llvm.gla.fSwizzle.v3f32.v4f32.v3i32(<4 x
float> %r.0, <3 x i32> <i32 0, i32 1, i32 2>)
- %26 = icmp slt i32 %i25.0, %.pre
- br i1 %26, label %ifmerge29, label %then27
+ %26 = icmp slt i32 %i23.0, %.pre
+ br i1 %26, label %ifmerge27, label %then25

-then27: ; preds = %loop-header26
+then25: ; preds = %loop-header24
%27 = fadd <3 x float> %25, %22
- %28 = call <4 x float>
@llvm.gla.fMultiInsert.v4f32.v4f32.v3f32.v3f32.v3f32.f32(<4 x
float> %gl_FragColor23, i32 7, <3 x float> %27, i32 0, <3 x float> %27, i32
1, <3 x float> %27, i32 2, float undef, i32 undef)
- %gl_FragColor40 = fmul <4 x float> %28, %24
- %gl_FragColor40.1 = fmul <4 x float> %gl_FragColor40, %24
- %gl_FragColor40.2 = fmul <4 x float> %gl_FragColor40.1, %24
- %gl_FragColor40.3 = fmul <4 x float> %gl_FragColor40.2, %24
- store <4 x float> %gl_FragColor40.3, <4 x float>* @gl_FragColor, align 16
+ %28 = call <4 x float>
@llvm.gla.fMultiInsert.v4f32.v4f32.v3f32.v3f32.v3f32.f32(<4 x
float> %gl_FragColor21, i32 7, <3 x float> %27, i32 0, <3 x float> %27, i32
1, <3 x float> %27, i32 2, float undef, i32 undef)
+ %gl_FragColor37 = fmul <4 x float> %28, %24
+ %gl_FragColor37.1 = fmul <4 x float> %gl_FragColor37, %24
+ %gl_FragColor37.2 = fmul <4 x float> %gl_FragColor37.1, %24
+ %gl_FragColor37.3 = fmul <4 x float> %gl_FragColor37.2, %24
+ store <4 x float> %gl_FragColor37.3, <4 x float>* @gl_FragColor, align 16
br label %stage-epilogue

-stage-epilogue: ; preds = %then27
+stage-epilogue: ; preds = %then25
br label %stage-exit

stage-exit: ; preds = %stage-epilogue
ret void

-ifmerge29: ; preds = %loop-header26
+ifmerge27: ; preds = %loop-header24
%29 = call <4 x float>
@llvm.gla.fMultiInsert.v4f32.v4f32.f32.f32.f32.f32(<4 x float> %r.0, i32 8,
float undef, i32 undef, float undef, i32 undef, float undef, i32 undef,
float %23, i32 0)
- %i2531 = add i32 %i25.0, 1
- br label %loop-header26
+ %i2329 = add i32 %i23.0, 1
+ br label %loop-header24
}

; Function Attrs: nounwind readnone
=======================================
--- /trunk/test/baseResults/localAggregates.frag.out Thu May 21 01:11:19
2015 UTC
+++ /trunk/test/baseResults/localAggregates.frag.out Thu Jul 9 19:01:49
2015 UTC
@@ -101,9 +101,6 @@
store i32 %i6, i32* %i
br label %loop-header

-post-loop-continue: ; No predecessors!
- unreachable
-
loop-merge: ; preds = %then4
%29 = load i32 addrspace(2)* @condition, !gla.uniform !8
%30 = icmp eq i32 %29, 1
=======================================
--- /trunk/test/baseResults/loops.frag.out Thu May 21 01:11:19 2015 UTC
+++ /trunk/test/baseResults/loops.frag.out Thu Jul 9 19:01:49 2015 UTC
@@ -53,11 +53,11 @@

define fastcc void @main() {
entry:
- %i121 = alloca i32
%i107 = alloca i32
%i94 = alloca i32
- %i78 = alloca i32
- %i69 = alloca i32
+ %i82 = alloca i32
+ %i67 = alloca i32
+ %i59 = alloca i32
%i = alloca i32
%color = alloca <4 x float>
br label %mainBody
@@ -139,13 +139,10 @@
store <4 x float> %color16, <4 x float>* %color
br label %loop-header12

-post-loop-continue: ; No predecessors!
- unreachable
-
loop-merge17: ; preds = %then13
br label %loop-header18

-loop-header18: ; preds
= %ifmerge25, %then23, %loop-merge17
+loop-header18: ; preds
= %ifmerge24, %then23, %loop-merge17
%16 = load <4 x float>* %color
%17 = extractelement <4 x float> %16, i32 2
%18 = load float addrspace(2)* @d, !gla.uniform !3
@@ -154,7 +151,7 @@
br i1 %20, label %then19, label %ifmerge21

then19: ; preds = %loop-header18
- br label %loop-merge28
+ br label %loop-merge26

post-loop-break20: ; No predecessors!
unreachable
@@ -168,53 +165,47 @@
%24 = extractelement <4 x float> %23, i32 3
%25 = load float addrspace(2)* @d, !gla.uniform !3
%26 = fcmp olt float %24, %25
- br i1 %26, label %then23, label %ifmerge25
+ br i1 %26, label %then23, label %ifmerge24

then23: ; preds = %ifmerge21
br label %loop-header18

-post-loop-continue24: ; No predecessors!
+post-loop-continue: ; No predecessors!
unreachable

-ifmerge25: ; preds = %ifmerge21
+ifmerge24: ; preds = %ifmerge21
%27 = load <4 x float> addrspace(2)* @bigColor1_1, !gla.uniform !6
%28 = load <4 x float>* %color
- %color26 = fadd <4 x float> %28, %27
- store <4 x float> %color26, <4 x float>* %color
+ %color25 = fadd <4 x float> %28, %27
+ store <4 x float> %color25, <4 x float>* %color
br label %loop-header18

-post-loop-continue27: ; No predecessors!
- unreachable
+loop-merge26: ; preds = %then19
+ br label %loop-header27

-loop-merge28: ; preds = %then19
- br label %loop-header29
-
-loop-header29: ; preds
= %ifmerge32, %loop-merge28
+loop-header27: ; preds
= %ifmerge30, %loop-merge26
%29 = load <4 x float>* %color
%30 = extractelement <4 x float> %29, i32 0
%31 = fcmp olt float %30, 4.200000e+01
%32 = xor i1 %31, true
- br i1 %32, label %then30, label %ifmerge32
+ br i1 %32, label %then28, label %ifmerge30

-then30: ; preds = %loop-header29
- br label %loop-merge35
+then28: ; preds = %loop-header27
+ br label %loop-merge32

-post-loop-break31: ; No predecessors!
+post-loop-break29: ; No predecessors!
unreachable

-ifmerge32: ; preds = %loop-header29
+ifmerge30: ; preds = %loop-header27
%33 = load <4 x float>* %color
- %color33 = fadd <4 x float> %33, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
- store <4 x float> %color33, <4 x float>* %color
- br label %loop-header29
+ %color31 = fadd <4 x float> %33, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+ store <4 x float> %color31, <4 x float>* %color
+ br label %loop-header27

-post-loop-continue34: ; No predecessors!
- unreachable
+loop-merge32: ; preds = %then28
+ br label %loop-header33

-loop-merge35: ; preds = %then30
- br label %loop-header36
-
-loop-header36: ; preds
= %ifmerge39, %loop-merge35
+loop-header33: ; preds
= %ifmerge36, %loop-merge32
%34 = load <4 x float>* %color
%35 = extractelement <4 x float> %34, i32 3
%36 = load float addrspace(2)* @d2, !gla.uniform !7
@@ -225,235 +216,259 @@
%41 = fcmp olt float %39, %40
%42 = and i1 %37, %41
%43 = xor i1 %42, true
- br i1 %43, label %then37, label %ifmerge39
+ br i1 %43, label %then34, label %ifmerge36

-then37: ; preds = %loop-header36
- br label %loop-merge42
+then34: ; preds = %loop-header33
+ br label %loop-merge38

-post-loop-break38: ; No predecessors!
+post-loop-break35: ; No predecessors!
unreachable

-ifmerge39: ; preds = %loop-header36
+ifmerge36: ; preds = %loop-header33
%44 = load <4 x float> addrspace(2)* @bigColor1_2, !gla.uniform !9
%45 = load <4 x float>* %color
- %color40 = fadd <4 x float> %45, %44
- store <4 x float> %color40, <4 x float>* %color
- br label %loop-header36
+ %color37 = fadd <4 x float> %45, %44
+ store <4 x float> %color37, <4 x float>* %color
+ br label %loop-header33

-post-loop-continue41: ; No predecessors!
- unreachable
+loop-merge38: ; preds = %then34
+ br label %loop-header39

-loop-merge42: ; preds = %then37
- br label %loop-header43
-
-loop-header43: ; preds
= %ifmerge50, %loop-merge42
+loop-header39: ; preds
= %ifmerge46, %loop-merge38
%46 = load <4 x float>* %color
%47 = extractelement <4 x float> %46, i32 2
%48 = load float addrspace(2)* @d3, !gla.uniform !8
%49 = fcmp olt float %47, %48
%50 = xor i1 %49, true
- br i1 %50, label %then44, label %ifmerge46
+ br i1 %50, label %then40, label %ifmerge42

-then44: ; preds = %loop-header43
- br label %loop-merge53
+then40: ; preds = %loop-header39
+ br label %loop-merge48

-post-loop-break45: ; No predecessors!
+post-loop-break41: ; No predecessors!
unreachable

-ifmerge46: ; preds = %loop-header43
+ifmerge42: ; preds = %loop-header39
%51 = load <4 x float> addrspace(2)* @bigColor1_3, !gla.uniform !10
%52 = load <4 x float>* %color
- %color47 = fadd <4 x float> %52, %51
- store <4 x float> %color47, <4 x float>* %color
+ %color43 = fadd <4 x float> %52, %51
+ store <4 x float> %color43, <4 x float>* %color
%53 = load <4 x float>* %color
%54 = extractelement <4 x float> %53, i32 1
%55 = load float addrspace(2)* @d4, !gla.uniform !11
%56 = fcmp olt float %54, %55
- br i1 %56, label %then48, label %ifmerge50
+ br i1 %56, label %then44, label %ifmerge46

-then48: ; preds = %ifmerge46
- br label %loop-merge53
+then44: ; preds = %ifmerge42
+ br label %loop-merge48

-post-loop-break49: ; No predecessors!
+post-loop-break45: ; No predecessors!
unreachable

-ifmerge50: ; preds = %ifmerge46
+ifmerge46: ; preds = %ifmerge42
%57 = load <4 x float> addrspace(2)* @bigColor1_3, !gla.uniform !10
%58 = load <4 x float>* %color
- %color51 = fadd <4 x float> %58, %57
- store <4 x float> %color51, <4 x float>* %color
- br label %loop-header43
+ %color47 = fadd <4 x float> %58, %57
+ store <4 x float> %color47, <4 x float>* %color
+ br label %loop-header39

-post-loop-continue52: ; No predecessors!
- unreachable
-
-loop-merge53: ; preds
= %then48, %then44
+loop-merge48: ; preds
= %then44, %then40
store i32 0, i32* %i
- br label %loop-header54
+ br label %loop-header49

-loop-header54: ; preds
= %ifmerge57, %loop-merge53
+loop-header49: ; preds
= %ifmerge52, %loop-merge48
%59 = load i32* %i
%60 = load i32 addrspace(2)* @Count, !gla.uniform !12
%61 = icmp slt i32 %59, %60
%62 = xor i1 %61, true
- br i1 %62, label %then55, label %ifmerge57
+ br i1 %62, label %then50, label %ifmerge52

-then55: ; preds = %loop-header54
- br label %loop-merge61
+then50: ; preds = %loop-header49
+ br label %loop-merge55

-post-loop-break56: ; No predecessors!
+post-loop-break51: ; No predecessors!
unreachable

-ifmerge57: ; preds = %loop-header54
+ifmerge52: ; preds = %loop-header49
%63 = load <4 x float> addrspace(2)* @bigColor2, !gla.uniform !13
%64 = load <4 x float>* %color
- %color58 = fadd <4 x float> %64, %63
- store <4 x float> %color58, <4 x float>* %color
+ %color53 = fadd <4 x float> %64, %63
+ store <4 x float> %color53, <4 x float>* %color
%65 = load i32* %i
- %i59 = add i32 %65, 1
- store i32 %i59, i32* %i
- br label %loop-header54
+ %i54 = add i32 %65, 1
+ store i32 %i54, i32* %i
+ br label %loop-header49

-post-loop-continue60: ; No predecessors!
- unreachable
+loop-merge55: ; preds = %then50
+ br label %loop-header56

-loop-merge61: ; preds = %then55
- br label %loop-header62
+loop-header56: ; preds = %loop-merge55
+ br label %loop-body

-loop-header62: ; preds
= %ifmerge66, %loop-merge61
+loop-body: ; preds
= %loop-test, %loop-header56
%66 = load <4 x float> addrspace(2)* @bigColor3, !gla.uniform !14
%67 = load <4 x float>* %color
- %color63 = fadd <4 x float> %67, %66
- store <4 x float> %color63, <4 x float>* %color
+ %color57 = fadd <4 x float> %67, %66
+ store <4 x float> %color57, <4 x float>* %color
+ br label %loop-test
+
+loop-test: ; preds = %loop-body
%68 = load <4 x float>* %color
%69 = extractelement <4 x float> %68, i32 0
%70 = load float addrspace(2)* @d2, !gla.uniform !7
%71 = fcmp olt float %69, %70
- %72 = xor i1 %71, true
- br i1 %72, label %then64, label %ifmerge66
+ br i1 %71, label %loop-body, label %loop-merge58

-then64: ; preds = %loop-header62
- br label %loop-merge68
+loop-merge58: ; preds = %loop-test
+ store i32 0, i32* %i59
+ br label %loop-header60

-post-loop-break65: ; No predecessors!
- unreachable
+loop-header60: ; preds
= %ifmerge63, %loop-merge58
+ %72 = load i32* %i59
+ %73 = icmp slt i32 %72, 42
+ %74 = xor i1 %73, true
+ br i1 %74, label %then61, label %ifmerge63

-ifmerge66: ; preds = %loop-header62
- br label %loop-header62
+then61: ; preds = %loop-header60
+ br label %loop-merge66

-post-loop-continue67: ; No predecessors!
+post-loop-break62: ; No predecessors!
unreachable

-loop-merge68: ; preds = %then64
- store i32 0, i32* %i69
- br label %loop-header70
+ifmerge63: ; preds = %loop-header60
+ %75 = load float addrspace(2)* @d3, !gla.uniform !8
+ %76 = load <4 x float>* %color
+ %77 = extractelement <4 x float> %76, i32 2
+ %78 = fadd float %77, %75
+ %79 = load <4 x float>* %color
+ %color64 = insertelement <4 x float> %79, float %78, i32 2
+ store <4 x float> %color64, <4 x float>* %color
+ %80 = load i32* %i59
+ %i5965 = add i32 %80, 1
+ store i32 %i5965, i32* %i59
+ br label %loop-header60

-loop-header70: ; preds
= %ifmerge73, %loop-merge68
- %73 = load i32* %i69
- %74 = icmp slt i32 %73, 42
- %75 = xor i1 %74, true
- br i1 %75, label %then71, label %ifmerge73
+loop-merge66: ; preds = %then61
+ store i32 0, i32* %i67
+ br label %loop-header68

-then71: ; preds = %loop-header70
- br label %loop-merge77
+loop-header68: ; preds
= %ifmerge79, %loop-merge66
+ %81 = load i32* %i67
+ %82 = icmp slt i32 %81, 100
+ %83 = xor i1 %82, true
+ br i1 %83, label %then69, label %ifmerge71

-post-loop-break72: ; No predecessors!
+then69: ; preds = %loop-header68
+ br label %loop-merge81
+
+post-loop-break70: ; No predecessors!
unreachable

-ifmerge73: ; preds = %loop-header70
- %76 = load float addrspace(2)* @d3, !gla.uniform !8
- %77 = load <4 x float>* %color
- %78 = extractelement <4 x float> %77, i32 2
- %79 = fadd float %78, %76
- %80 = load <4 x float>* %color
- %color74 = insertelement <4 x float> %80, float %79, i32 2
- store <4 x float> %color74, <4 x float>* %color
- %81 = load i32* %i69
- %i6975 = add i32 %81, 1
- store i32 %i6975, i32* %i69
- br label %loop-header70
+ifmerge71: ; preds = %loop-header68
+ %84 = load <4 x float>* %color
+ %85 = extractelement <4 x float> %84, i32 2
+ %86 = fcmp olt float %85, 2.000000e+01
+ br i1 %86, label %then72, label %else

-post-loop-continue76: ; No predecessors!
- unreachable
+then72: ; preds = %ifmerge71
+ %87 = load <4 x float>* %color
+ %88 = extractelement <4 x float> %87, i32 0
+ %89 = fadd float %88, 1.000000e+00
+ %90 = load <4 x float>* %color
+ %color73 = insertelement <4 x float> %90, float %89, i32 0
+ store <4 x float> %color73, <4 x float>* %color
+ br label %ifmerge75
+
+else: ; preds = %ifmerge71
+ %91 = load <4 x float>* %color
+ %92 = extractelement <4 x float> %91, i32 1
+ %93 = fadd float %92, 1.000000e+00
+ %94 = load <4 x float>* %color
+ %color74 = insertelement <4 x float> %94, float %93, i32 1
+ store <4 x float> %color74, <4 x float>* %color
+ br label %ifmerge75

-loop-merge77: ; preds = %then71
- store i32 0, i32* %i78
- br label %loop-header79
+ifmerge75: ; preds = %else, %then72
+ %95 = load <4 x float>* %color
+ %96 = extractelement <4 x float> %95, i32 3
+ %97 = fcmp olt float %96, 2.000000e+01
+ br i1 %97, label %then76, label %ifmerge79

-loop-header79: ; preds
= %ifmerge90, %loop-merge77
- %82 = load i32* %i78
- %83 = icmp slt i32 %82, 100
- %84 = xor i1 %83, true
- br i1 %84, label %then80, label %ifmerge82
+then76: ; preds = %ifmerge75
+ %98 = load <4 x float>* %color
+ %99 = extractelement <4 x float> %98, i32 2
+ %100 = load <4 x float>* %color
+ %101 = extractelement <4 x float> %100, i32 1
+ %102 = fcmp ogt float %99, %101
+ br i1 %102, label %then77, label %ifmerge78

-then80: ; preds = %loop-header79
- br label %loop-merge93
+then77: ; preds = %then76
+ br label %ifmerge78

-post-loop-break81: ; No predecessors!
- unreachable
+ifmerge78: ; preds
= %then76, %then77
+ br label %ifmerge79

-ifmerge82: ; preds = %loop-header79
- %85 = load <4 x float>* %color
- %86 = extractelement <4 x float> %85, i32 2
- %87 = fcmp olt float %86, 2.000000e+01
- br i1 %87, label %then83, label %else
+ifmerge79: ; preds
= %ifmerge75, %ifmerge78
+ %103 = load i32* %i67
+ %i6780 = add i32 %103, 1
+ store i32 %i6780, i32* %i67
+ br label %loop-header68

-then83: ; preds = %ifmerge82
- %88 = load <4 x float>* %color
- %89 = extractelement <4 x float> %88, i32 0
- %90 = fadd float %89, 1.000000e+00
- %91 = load <4 x float>* %color
- %color84 = insertelement <4 x float> %91, float %90, i32 0
- store <4 x float> %color84, <4 x float>* %color
- br label %ifmerge86
+loop-merge81: ; preds = %then69
+ store i32 0, i32* %i82
+ br label %loop-header83

-else: ; preds = %ifmerge82
- %92 = load <4 x float>* %color
- %93 = extractelement <4 x float> %92, i32 1
- %94 = fadd float %93, 1.000000e+00
- %95 = load <4 x float>* %color
- %color85 = insertelement <4 x float> %95, float %94, i32 1
- store <4 x float> %color85, <4 x float>* %color
- br label %ifmerge86
+loop-header83: ; preds
= %ifmerge91, %loop-merge81
+ %104 = load i32* %i82
+ %105 = icmp slt i32 %104, 120
+ %106 = xor i1 %105, true
+ br i1 %106, label %then84, label %ifmerge86

-ifmerge86: ; preds = %else, %then83
- %96 = load <4 x float>* %color
- %97 = extractelement <4 x float> %96, i32 3
- %98 = fcmp olt float %97, 2.000000e+01
- br i1 %98, label %then87, label %ifmerge90
+then84: ; preds = %loop-header83
+ br label %loop-merge93

-then87: ; preds = %ifmerge86
- %99 = load <4 x float>* %color
- %100 = extractelement <4 x float> %99, i32 2
- %101 = load <4 x float>* %color
- %102 = extractelement <4 x float> %101, i32 1
- %103 = fcmp ogt float %100, %102
- br i1 %103, label %then88, label %ifmerge89
+post-loop-break85: ; No predecessors!
+ unreachable

-then88: ; preds = %then87
- br label %ifmerge89
+ifmerge86: ; preds = %loop-header83
+ %107 = load <4 x float>* %color
+ %108 = extractelement <4 x float> %107, i32 2
+ %109 = fcmp olt float %108, 2.000000e+01
+ br i1 %109, label %then87, label %else89

-ifmerge89: ; preds
= %then87, %then88
- br label %ifmerge90
+then87: ; preds = %ifmerge86
+ %110 = load <4 x float>* %color
+ %111 = extractelement <4 x float> %110, i32 0
+ %112 = fadd float %111, 1.000000e+00
+ %113 = load <4 x float>* %color
+ %color88 = insertelement <4 x float> %113, float %112, i32 0
+ store <4 x float> %color88, <4 x float>* %color
+ br label %ifmerge91

-ifmerge90: ; preds
= %ifmerge86, %ifmerge89
- %104 = load i32* %i78
- %i7891 = add i32 %104, 1
- store i32 %i7891, i32* %i78
- br label %loop-header79
+else89: ; preds = %ifmerge86
+ %114 = load <4 x float>* %color
+ %115 = extractelement <4 x float> %114, i32 1
+ %116 = fadd float %115, 1.000000e+00
+ %117 = load <4 x float>* %color
+ %color90 = insertelement <4 x float> %117, float %116, i32 1
+ store <4 x float> %color90, <4 x float>* %color
+ br label %ifmerge91

-post-loop-continue92: ; No predecessors!
- unreachable
+ifmerge91: ; preds
= %else89, %then87
+ %118 = load i32* %i82
+ %i8292 = add i32 %118, 1
+ store i32 %i8292, i32* %i82
+ br label %loop-header83

-loop-merge93: ; preds = %then80
+loop-merge93: ; preds = %then84
store i32 0, i32* %i94
br label %loop-header95

-loop-header95: ; preds
= %ifmerge103, %loop-merge93
- %105 = load i32* %i94
- %106 = icmp slt i32 %105, 120
- %107 = xor i1 %106, true
- br i1 %107, label %then96, label %ifmerge98
+loop-header95: ; preds
= %ifmerge103, %then100, %loop-merge93
+ %119 = load i32* %i94
+ %120 = icmp slt i32 %119, 42
+ %121 = xor i1 %120, true
+ br i1 %121, label %then96, label %ifmerge98

then96: ; preds = %loop-header95
br label %loop-merge106
@@ -462,957 +477,838 @@
unreachable

ifmerge98: ; preds = %loop-header95
- %108 = load <4 x float>* %color
- %109 = extractelement <4 x float> %108, i32 2
- %110 = fcmp olt float %109, 2.000000e+01
- br i1 %110, label %then99, label %else101
-
-then99: ; preds = %ifmerge98
- %111 = load <4 x float>* %color
- %112 = extractelement <4 x float> %111, i32 0
- %113 = fadd float %112, 1.000000e+00
- %114 = load <4 x float>* %color
- %color100 = insertelement <4 x float> %114, float %113, i32 0
- store <4 x float> %color100, <4 x float>* %color
- br label %ifmerge103
-
-else101: ; preds = %ifmerge98
- %115 = load <4 x float>* %color
- %116 = extractelement <4 x float> %115, i32 1
- %117 = fadd float %116, 1.000000e+00
- %118 = load <4 x float>* %color
- %color102 = insertelement <4 x float> %118, float %117, i32 1
- store <4 x float> %color102, <4 x float>* %color
- br label %ifmerge103
+ %122 = load float addrspace(2)* @d3, !gla.uniform !8
+ %123 = load <4 x float>* %color
+ %124 = extractelement <4 x float> %123, i32 2
+ %125 = fadd float %124, %122
+ %126 = load <4 x float>* %color
+ %color99 = insertelement <4 x float> %126, float %125, i32 2
+ store <4 x float> %color99, <4 x float>* %color
+ %127 = load <4 x float>* %color
+ %128 = extractelement <4 x float> %127, i32 0
+ %129 = load float addrspace(2)* @d4, !gla.uniform !11
+ %130 = fcmp olt float %128, %129
+ br i1 %130, label %then100, label %ifmerge103

-ifmerge103: ; preds
= %else101, %then99
- %119 = load i32* %i94
- %i94104 = add i32 %119, 1
- store i32 %i94104, i32* %i94
+then100: ; preds = %ifmerge98
+ %131 = load i32* %i94
+ %i94101 = add i32 %131, 1
+ store i32 %i94101, i32* %i94
br label %loop-header95

-post-loop-continue105: ; No predecessors!
+post-loop-continue102: ; No predecessors!
unreachable

+ifmerge103: ; preds = %ifmerge98
+ %132 = load <4 x float>* %color
+ %133 = extractelement <4 x float> %132, i32 3
+ %134 = fadd float %133, 1.000000e+00
+ %135 = load <4 x float>* %color
+ %color104 = insertelement <4 x float> %135, float %134, i32 3
+ store <4 x float> %color104, <4 x float>* %color
+ %136 = load i32* %i94
+ %i94105 = add i32 %136, 1
+ store i32 %i94105, i32* %i94
+ br label %loop-header95
+
loop-merge106: ; preds = %then96
store i32 0, i32* %i107
br label %loop-header108

-loop-header108: ; preds
= %ifmerge116, %then113, %loop-merge106
- %120 = load i32* %i107
- %121 = icmp slt i32 %120, 42
- %122 = xor i1 %121, true
- br i1 %122, label %then109, label %ifmerge111
+loop-header108: ; preds
= %ifmerge115, %loop-merge106
+ %137 = load i32* %i107
+ %138 = icmp slt i32 %137, 42
+ %139 = xor i1 %138, true
+ br i1 %139, label %then109, label %ifmerge111

then109: ; preds = %loop-header108
- br label %loop-merge120
+ br label %loop-merge118

post-loop-break110: ; No predecessors!
unreachable

ifmerge111: ; preds = %loop-header108
- %123 = load float addrspace(2)* @d3, !gla.uniform !8
- %124 = load <4 x float>* %color
- %125 = extractelement <4 x float> %124, i32 2
- %126 = fadd float %125, %123
- %127 = load <4 x float>* %color
- %color112 = insertelement <4 x float> %127, float %126, i32 2
+ %140 = load float addrspace(2)* @d3, !gla.uniform !8
+ %141 = load <4 x float>* %color
+ %142 = extractelement <4 x float> %141, i32 2
+ %143 = fadd float %142, %140
+ %144 = load <4 x float>* %color
+ %color112 = insertelement <4 x float> %144, float %143, i32 2
store <4 x float> %color112, <4 x float>* %color
- %128 = load <4 x float>* %color
- %129 = extractelement <4 x float> %128, i32 0
- %130 = load float addrspace(2)* @d4, !gla.uniform !11
- %131 = fcmp olt float %129, %130
- br i1 %131, label %then113, label %ifmerge116
+ %145 = load <4 x float>* %color
+ %146 = extractelement <4 x float> %145, i32 0
+ %147 = load float addrspace(2)* @d4, !gla.uniform !11
+ %148 = fcmp olt float %146, %147
+ br i1 %148, label %then113, label %ifmerge115

then113: ; preds = %ifmerge111
- %132 = load i32* %i107
- %i107114 = add i32 %132, 1
- store i32 %i107114, i32* %i107
- br label %loop-header108
+ br label %loop-merge118

-post-loop-continue115: ; No predecessors!
+post-loop-break114: ; No predecessors!
unreachable

-ifmerge116: ; preds = %ifmerge111
- %133 = load <4 x float>* %color
- %134 = extractelement <4 x float> %133, i32 3
- %135 = fadd float %134, 1.000000e+00
- %136 = load <4 x float>* %color
- %color117 = insertelement <4 x float> %136, float %135, i32 3
- store <4 x float> %color117, <4 x float>* %color
- %137 = load i32* %i107
- %i107118 = add i32 %137, 1
- store i32 %i107118, i32* %i107
+ifmerge115: ; preds = %ifmerge111
+ %149 = load <4 x float>* %color
+ %150 = extractelement <4 x float> %149, i32 3
+ %151 = fadd float %150, 1.000000e+00
+ %152 = load <4 x float>* %color
+ %color116 = insertelement <4 x float> %152, float %151, i32 3
+ store <4 x float> %color116, <4 x float>* %color
+ %153 = load i32* %i107
+ %i107117 = add i32 %153, 1
+ store i32 %i107117, i32* %i107
br label %loop-header108

-post-loop-continue119: ; No predecessors!
- unreachable
+loop-merge118: ; preds
= %then113, %then109
+ br label %loop-header119

-loop-merge120: ; preds = %then109
- store i32 0, i32* %i121
- br label %loop-header122
+loop-header119: ; preds = %loop-merge118
+ br label %loop-body120

-loop-header122: ; preds
= %ifmerge129, %loop-merge120
- %138 = load i32* %i121
- %139 = icmp slt i32 %138, 42
- %140 = xor i1 %139, true
- br i1 %140, label %then123, label %ifmerge125
+loop-body120: ; preds
= %loop-test130, %loop-header119
+ %154 = load <4 x float> addrspace(2)* @bigColor4, !gla.uniform !15
+ %155 = load <4 x float>* %color
+ %color121 = fadd <4 x float> %155, %154
+ store <4 x float> %color121, <4 x float>* %color
+ %156 = load <4 x float>* %color
+ %157 = extractelement <4 x float> %156, i32 0
+ %158 = load float addrspace(2)* @d4, !gla.uniform !11
+ %159 = fcmp olt float %157, %158
+ br i1 %159, label %then122, label %ifmerge124

-then123: ; preds = %loop-header122
- br label %loop-merge133
+then122: ; preds = %loop-body120
+ br label %loop-test130

-post-loop-break124: ; No predecessors!
+post-loop-continue123: ; No predecessors!
unreachable

-ifmerge125: ; preds = %loop-header122
- %141 = load float addrspace(2)* @d3, !gla.uniform !8
- %142 = load <4 x float>* %color
- %143 = extractelement <4 x float> %142, i32 2
- %144 = fadd float %143, %141
- %145 = load <4 x float>* %color
- %color126 = insertelement <4 x float> %145, float %144, i32 2
+ifmerge124: ; preds = %loop-body120
+ %160 = load <4 x float>* %color
+ %161 = extractelement <4 x float> %160, i32 1
+ %162 = load float addrspace(2)* @d4, !gla.uniform !11
+ %163 = fcmp olt float %161, %162
+ br i1 %163, label %then125, label %else127
+
+then125: ; preds = %ifmerge124
+ %164 = load float addrspace(2)* @d4, !gla.uniform !11
+ %165 = load <4 x float>* %color
+ %166 = extractelement <4 x float> %165, i32 1
+ %167 = fadd float %166, %164
+ %168 = load <4 x float>* %color
+ %color126 = insertelement <4 x float> %168, float %167, i32 1
store <4 x float> %color126, <4 x float>* %color
- %146 = load <4 x float>* %color
- %147 = extractelement <4 x float> %146, i32 0
- %148 = load float addrspace(2)* @d4, !gla.uniform !11
- %149 = fcmp olt float %147, %148
- br i1 %149, label %then127, label %ifmerge129
+ br label %ifmerge129

-then127: ; preds = %ifmerge125
- br label %loop-merge133
+else127: ; preds = %ifmerge124
+ %169 = load float addrspace(2)* @d4, !gla.uniform !11
+ %170 = load <4 x float>* %color
+ %171 = extractelement <4 x float> %170, i32 0
+ %172 = fadd float %171, %169
+ %173 = load <4 x float>* %color
+ %color128 = insertelement <4 x float> %173, float %172, i32 0
+ store <4 x float> %color128, <4 x float>* %color
+ br label %ifmerge129

-post-loop-break128: ; No predecessors!
- unreachable
+ifmerge129: ; preds
= %else127, %then125
+ br label %loop-test130

-ifmerge129: ; preds = %ifmerge125
- %150 = load <4 x float>* %color
- %151 = extractelement <4 x float> %150, i32 3
- %152 = fadd float %151, 1.000000e+00
- %153 = load <4 x float>* %color
- %color130 = insertelement <4 x float> %153, float %152, i32 3
- store <4 x float> %color130, <4 x float>* %color
- %154 = load i32* %i121
- %i121131 = add i32 %154, 1
- store i32 %i121131, i32* %i121
- br label %loop-header122
-
-post-loop-continue132: ; No predecessors!
- unreachable
-
-loop-merge133: ; preds
= %then127, %then123
- br label %loop-header134
-
-loop-header134: ; preds
= %ifmerge146, %then136, %loop-merge133
- %155 = load <4 x float> addrspace(2)* @bigColor4, !gla.uniform !15
- %156 = load <4 x float>* %color
- %color135 = fadd <4 x float> %156, %155
- store <4 x float> %color135, <4 x float>* %color
- %157 = load <4 x float>* %color
- %158 = extractelement <4 x float> %157, i32 0
- %159 = load float addrspace(2)* @d4, !gla.uniform !11
- %160 = fcmp olt float %158, %159
- br i1 %160, label %then136, label %ifmerge138
-
-then136: ; preds = %loop-header134
- br label %loop-header134
-
-post-loop-continue137: ; No predecessors!
- unreachable
-
-ifmerge138: ; preds = %loop-header134
- %161 = load <4 x float>* %color
- %162 = extractelement <4 x float> %161, i32 1
- %163 = load float addrspace(2)* @d4, !gla.uniform !11
- %164 = fcmp olt float %162, %163
- br i1 %164, label %then139, label %else141
-
-then139: ; preds = %ifmerge138
- %165 = load float addrspace(2)* @d4, !gla.uniform !11
- %166 = load <4 x float>* %color
- %167 = extractelement <4 x float> %166, i32 1
- %168 = fadd float %167, %165
- %169 = load <4 x float>* %color
- %color140 = insertelement <4 x float> %169, float %168, i32 1
- store <4 x float> %color140, <4 x float>* %color
- br label %ifmerge143
-
-else141: ; preds = %ifmerge138
- %170 = load float addrspace(2)* @d4, !gla.uniform !11
- %171 = load <4 x float>* %color
- %172 = extractelement <4 x float> %171, i32 0
- %173 = fadd float %172, %170
+loop-test130: ; preds
= %ifmerge129, %then122
%174 = load <4 x float>* %color
- %color142 = insertelement <4 x float> %174, float %173, i32 0
- store <4 x float> %color142, <4 x float>* %color
- br label %ifmerge143
+ %175 = extractelement <4 x float> %174, i32 2
+ %176 = load float addrspace(2)* @d4, !gla.uniform !11
+ %177 = fcmp olt float %175, %176
+ br i1 %177, label %loop-body120, label %loop-merge131

-ifmerge143: ; preds
= %else141, %then139
- %175 = load <4 x float>* %color
- %176 = extractelement <4 x float> %175, i32 2
- %177 = load float addrspace(2)* @d4, !gla.uniform !11
- %178 = fcmp olt float %176, %177
- %179 = xor i1 %178, true
- br i1 %179, label %then144, label %ifmerge146
+loop-merge131: ; preds = %loop-test130
+ br label %loop-header132

-then144: ; preds = %ifmerge143
- br label %loop-merge148
+loop-header132: ; preds = %loop-merge131
+ br label %loop-body133

-post-loop-break145: ; No predecessors!
- unreachable
+loop-body133: ; preds
= %loop-test138, %loop-header132
+ %178 = load <4 x float> addrspace(2)* @bigColor5, !gla.uniform !16
+ %179 = load <4 x float>* %color
+ %color134 = fadd <4 x float> %179, %178
+ store <4 x float> %color134, <4 x float>* %color
+ %180 = load <4 x float>* %color
+ %181 = extractelement <4 x float> %180, i32 1
+ %182 = load float addrspace(2)* @d5, !gla.uniform !17
+ %183 = fcmp olt float %181, %182
+ br i1 %183, label %then135, label %ifmerge137

-ifmerge146: ; preds = %ifmerge143
- br label %loop-header134
-
-post-loop-continue147: ; No predecessors!
- unreachable
-
-loop-merge148: ; preds = %then144
- br label %loop-header149
-
-loop-header149: ; preds
= %ifmerge156, %loop-merge148
- %180 = load <4 x float> addrspace(2)* @bigColor5, !gla.uniform !16
- %181 = load <4 x float>* %color
- %color150 = fadd <4 x float> %181, %180
- store <4 x float> %color150, <4 x float>* %color
- %182 = load <4 x float>* %color
- %183 = extractelement <4 x float> %182, i32 1
+then135: ; preds = %loop-body133
%184 = load float addrspace(2)* @d5, !gla.uniform !17
- %185 = fcmp olt float %183, %184
- br i1 %185, label %then151, label %ifmerge153
+ %185 = load <4 x float>* %color
+ %186 = extractelement <4 x float> %185, i32 1
+ %187 = fadd float %186, %184
+ %188 = load <4 x float>* %color
+ %color136 = insertelement <4 x float> %188, float %187, i32 1
+ store <4 x float> %color136, <4 x float>* %color
+ br label %ifmerge137

-then151: ; preds = %loop-header149
- %186 = load float addrspace(2)* @d5, !gla.uniform !17
- %187 = load <4 x float>* %color
- %188 = extractelement <4 x float> %187, i32 1
- %189 = fadd float %188, %186
- %190 = load <4 x float>* %color
- %color152 = insertelement <4 x float> %190, float %189, i32 1
- store <4 x float> %color152, <4 x float>* %color
- br label %ifmerge153
+ifmerge137: ; preds
= %loop-body133, %then135
+ br label %loop-test138

-ifmerge153: ; preds
= %loop-header149, %then151
- %191 = load <4 x float>* %color
- %192 = extractelement <4 x float> %191, i32 0
- %193 = load float addrspace(2)* @d5, !gla.uniform !17
- %194 = fcmp olt float %192, %193
- %195 = xor i1 %194, true
- br i1 %195, label %then154, label %ifmerge156
-
-then154: ; preds = %ifmerge153
- br label %loop-merge158
-
-post-loop-break155: ; No predecessors!
- unreachable
-
-ifmerge156: ; preds = %ifmerge153
- br label %loop-header149
-
-post-loop-continue157: ; No predecessors!
- unreachable
+loop-test138: ; preds = %ifmerge137
+ %189 = load <4 x float>* %color
+ %190 = extractelement <4 x float> %189, i32 0
+ %191 = load float addrspace(2)* @d5, !gla.uniform !17
+ %192 = fcmp olt float %190, %191
+ br i1 %192, label %loop-body133, label %loop-merge139

-loop-merge158: ; preds = %then154
- %196 = load <4 x float>* %color
- %197 = extractelement <4 x float> %196, i32 0
- %198 = load float addrspace(2)* @d6, !gla.uniform !18
- %199 = fcmp olt float %197, %198
- br i1 %199, label %then159, label %else167
+loop-merge139: ; preds = %loop-test138
+ %193 = load <4 x float>* %color
+ %194 = extractelement <4 x float> %193, i32 0
+ %195 = load float addrspace(2)* @d6, !gla.uniform !18
+ %196 = fcmp olt float %194, %195
+ br i1 %196, label %then140, label %else147

-then159: ; preds = %loop-merge158
- br label %loop-header160
+then140: ; preds = %loop-merge139
+ br label %loop-header141

-loop-header160: ; preds
= %ifmerge163, %then159
- %200 = load <4 x float>* %color
- %201 = extractelement <4 x float> %200, i32 1
- %202 = load float addrspace(2)* @d6, !gla.uniform !18
- %203 = fcmp olt float %201, %202
- %204 = xor i1 %203, true
- br i1 %204, label %then161, label %ifmerge163
+loop-header141: ; preds
= %ifmerge144, %then140
+ %197 = load <4 x float>* %color
+ %198 = extractelement <4 x float> %197, i32 1
+ %199 = load float addrspace(2)* @d6, !gla.uniform !18
+ %200 = fcmp olt float %198, %199
+ %201 = xor i1 %200, true
+ br i1 %201, label %then142, label %ifmerge144

-then161: ; preds = %loop-header160
- br label %loop-merge166
+then142: ; preds = %loop-header141
+ br label %loop-merge146

-post-loop-break162: ; No predecessors!
+post-loop-break143: ; No predecessors!
unreachable

-ifmerge163: ; preds = %loop-header160
- %205 = load <4 x float> addrspace(2)* @bigColor6, !gla.uniform !19
- %206 = load <4 x float>* %color
- %color164 = fadd <4 x float> %206, %205
- store <4 x float> %color164, <4 x float>* %color
- br label %loop-header160
-
-post-loop-continue165: ; No predecessors!
- unreachable
+ifmerge144: ; preds = %loop-header141
+ %202 = load <4 x float> addrspace(2)* @bigColor6, !gla.uniform !19
+ %203 = load <4 x float>* %color
+ %color145 = fadd <4 x float> %203, %202
+ store <4 x float> %color145, <4 x float>* %color
+ br label %loop-header141

-loop-merge166: ; preds = %then161
- br label %ifmerge175
+loop-merge146: ; preds = %then142
+ br label %ifmerge154

-else167: ; preds = %loop-merge158
- br label %loop-header168
+else147: ; preds = %loop-merge139
+ br label %loop-header148

-loop-header168: ; preds
= %ifmerge171, %else167
- %207 = load <4 x float>* %color
- %208 = extractelement <4 x float> %207, i32 2
- %209 = load float addrspace(2)* @d6, !gla.uniform !18
- %210 = fcmp olt float %208, %209
- %211 = xor i1 %210, true
- br i1 %211, label %then169, label %ifmerge171
+loop-header148: ; preds
= %ifmerge151, %else147
+ %204 = load <4 x float>* %color
+ %205 = extractelement <4 x float> %204, i32 2
+ %206 = load float addrspace(2)* @d6, !gla.uniform !18
+ %207 = fcmp olt float %205, %206
+ %208 = xor i1 %207, true
+ br i1 %208, label %then149, label %ifmerge151

-then169: ; preds = %loop-header168
- br label %loop-merge174
+then149: ; preds = %loop-header148
+ br label %loop-merge153

-post-loop-break170: ; No predecessors!
+post-loop-break150: ; No predecessors!
unreachable
***The diff for this file has been truncated for email.***
=======================================
--- /trunk/test/baseResults/loopsArtificial.frag.out Thu May 21 01:11:19
2015 UTC
+++ /trunk/test/baseResults/loopsArtificial.frag.out Thu Jul 9 19:01:49
2015 UTC
@@ -61,7 +61,10 @@
store <4 x float> %color1, <4 x float>* %color
br label %loop-header

-loop-header: ; preds
= %ifmerge12, %then4, %mainBody
+loop-header: ; preds = %mainBody
+ br label %loop-body
+
+loop-body: ; preds
= %loop-test, %loop-header
%0 = load <4 x float> addrspace(2)* @bigColor4, !gla.uniform !3
%1 = load <4 x float>* %color
%color2 = fadd <4 x float> %1, %0
@@ -72,7 +75,7 @@
%5 = fcmp olt float %3, %4
br i1 %5, label %then, label %ifmerge6

-then: ; preds = %loop-header
+then: ; preds = %loop-body
%6 = load <4 x float>* %color
%7 = extractelement <4 x float> %6, i32 2
%8 = fadd float %7, 2.000000e+00
@@ -92,7 +95,7 @@
%17 = load <4 x float>* %color
%color5 = insertelement <4 x float> %17, float %16, i32 0
store <4 x float> %color5, <4 x float>* %color
- br label %loop-header
+ br label %loop-test

post-loop-continue: ; No predecessors!
unreachable
@@ -100,7 +103,7 @@
ifmerge: ; preds = %then
br label %ifmerge6

-ifmerge6: ; preds
= %loop-header, %ifmerge
+ifmerge6: ; preds
= %loop-body, %ifmerge
%18 = load <4 x float>* %color
%19 = extractelement <4 x float> %18, i32 1
%20 = load float addrspace(2)* @d4, !gla.uniform !5
@@ -128,142 +131,129 @@
br label %ifmerge10

ifmerge10: ; preds = %else, %then7
+ br label %loop-test
+
+loop-test: ; preds
= %ifmerge10, %then4
%32 = load <4 x float>* %color
%33 = extractelement <4 x float> %32, i32 2
%34 = load float addrspace(2)* @d4, !gla.uniform !5
%35 = fcmp olt float %33, %34
- %36 = xor i1 %35, true
- br i1 %36, label %then11, label %ifmerge12
+ br i1 %35, label %loop-body, label %loop-merge

-then11: ; preds = %ifmerge10
- br label %loop-merge
+loop-merge: ; preds = %loop-test
+ br label %loop-header11

-post-loop-break: ; No predecessors!
- unreachable
+loop-header11: ; preds
= %ifmerge31, %then22, %loop-merge
+ %36 = load <4 x float>* %color
+ %37 = extractelement <4 x float> %36, i32 3
+ %38 = load float addrspace(2)* @d13, !gla.uniform !6
+ %39 = fcmp olt float %37, %38
+ %40 = xor i1 %39, true
+ br i1 %40, label %then12, label %ifmerge13

-ifmerge12: ; preds = %ifmerge10
- br label %loop-header
+then12: ; preds = %loop-header11
+ br label %loop-merge32

-post-loop-continue13: ; No predecessors!
+post-loop-break: ; No predecessors!
unreachable

-loop-merge: ; preds = %then11
- br label %loop-header14
+ifmerge13: ; preds = %loop-header11
+ %41 = load <4 x float>* %color
+ %42 = extractelement <4 x float> %41, i32 2
+ %43 = load float addrspace(2)* @d13, !gla.uniform !6
+ %44 = fcmp olt float %42, %43
+ br i1 %44, label %then14, label %else16

-loop-header14: ; preds
= %ifmerge35, %then26, %loop-merge
- %37 = load <4 x float>* %color
- %38 = extractelement <4 x float> %37, i32 3
- %39 = load float addrspace(2)* @d13, !gla.uniform !6
- %40 = fcmp olt float %38, %39
- %41 = xor i1 %40, true
- br i1 %41, label %then15, label %ifmerge17
+then14: ; preds = %ifmerge13
+ %45 = load <4 x float>* %color
+ %color15 = fadd <4 x float> %45, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+ store <4 x float> %color15, <4 x float>* %color
+ br label %ifmerge18

-then15: ; preds = %loop-header14
- br label %loop-merge37
+else16: ; preds = %ifmerge13
+ %46 = load <4 x float>* %color
+ %color17 = fsub <4 x float> %46, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+ store <4 x float> %color17, <4 x float>* %color
+ br label %ifmerge18

-post-loop-break16: ; No predecessors!
- unreachable
-
-ifmerge17: ; preds = %loop-header14
- %42 = load <4 x float>* %color
- %43 = extractelement <4 x float> %42, i32 2
- %44 = load float addrspace(2)* @d13, !gla.uniform !6
- %45 = fcmp olt float %43, %44
- br i1 %45, label %then18, label %else20
-
-then18: ; preds = %ifmerge17
- %46 = load <4 x float>* %color
- %color19 = fadd <4 x float> %46, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+ifmerge18: ; preds
= %else16, %then14
+ %47 = load <4 x float> addrspace(2)* @bigColor4, !gla.uniform !3
+ %48 = load <4 x float>* %color
+ %color19 = fadd <4 x float> %48, %47
store <4 x float> %color19, <4 x float>* %color
- br label %ifmerge22
-
-else20: ; preds = %ifmerge17
- %47 = load <4 x float>* %color
- %color21 = fsub <4 x float> %47, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
- store <4 x float> %color21, <4 x float>* %color
- br label %ifmerge22
-
-ifmerge22: ; preds
= %else20, %then18
- %48 = load <4 x float> addrspace(2)* @bigColor4, !gla.uniform !3
%49 = load <4 x float>* %color
- %color23 = fadd <4 x float> %49, %48
- store <4 x float> %color23, <4 x float>* %color
- %50 = load <4 x float>* %color
- %51 = extractelement <4 x float> %50, i32 0
- %52 = load float addrspace(2)* @d4, !gla.uniform !5
- %53 = fcmp olt float %51, %52
- br i1 %53, label %then24, label %ifmerge30
+ %50 = extractelement <4 x float> %49, i32 0
+ %51 = load float addrspace(2)* @d4, !gla.uniform !5
+ %52 = fcmp olt float %50, %51
+ br i1 %52, label %then20, label %ifmerge26

-then24: ; preds = %ifmerge22
- %54 = load <4 x float>* %color
- %55 = extractelement <4 x float> %54, i32 2
- %56 = fadd float %55, 2.000000e+00
+then20: ; preds = %ifmerge18
+ %53 = load <4 x float>* %color
+ %54 = extractelement <4 x float> %53, i32 2
+ %55 = fadd float %54, 2.000000e+00
+ %56 = load <4 x float>* %color
+ %color21 = insertelement <4 x float> %56, float %55, i32 2
+ store <4 x float> %color21, <4 x float>* %color
%57 = load <4 x float>* %color
- %color25 = insertelement <4 x float> %57, float %56, i32 2
- store <4 x float> %color25, <4 x float>* %color
- %58 = load <4 x float>* %color
- %59 = extractelement <4 x float> %58, i32 2
- %60 = load float addrspace(2)* @d4, !gla.uniform !5
- %61 = fcmp olt float %59, %60
- br i1 %61, label %then26, label %ifmerge29
+ %58 = extractelement <4 x float> %57, i32 2
+ %59 = load float addrspace(2)* @d4, !gla.uniform !5
+ %60 = fcmp olt float %58, %59
+ br i1 %60, label %then22, label %ifmerge25

-then26: ; preds = %then24
- %62 = load <4 x float>* %color
- %63 = extractelement <4 x float> %62, i32 0
- %64 = fadd float %63, 1.000000e+00
- %65 = load <4 x float>* %color
- %color27 = insertelement <4 x float> %65, float %64, i32 0
- store <4 x float> %color27, <4 x float>* %color
- br label %loop-header14
+then22: ; preds = %then20
+ %61 = load <4 x float>* %color
+ %62 = extractelement <4 x float> %61, i32 0
+ %63 = fadd float %62, 1.000000e+00
+ %64 = load <4 x float>* %color
+ %color23 = insertelement <4 x float> %64, float %63, i32 0
+ store <4 x float> %color23, <4 x float>* %color
+ br label %loop-header11

-post-loop-continue28: ; No predecessors!
+post-loop-continue24: ; No predecessors!
unreachable

-ifmerge29: ; preds = %then24
- br label %ifmerge30
-
-ifmerge30: ; preds
= %ifmerge22, %ifmerge29
- %66 = load <4 x float>* %color
- %67 = extractelement <4 x float> %66, i32 1
- %68 = load float addrspace(2)* @d4, !gla.uniform !5
- %69 = fcmp olt float %67, %68
- br i1 %69, label %then31, label %else33
+ifmerge25: ; preds = %then20
+ br label %ifmerge26

-then31: ; preds = %ifmerge30
- %70 = load float addrspace(2)* @d4, !gla.uniform !5
- %71 = load <4 x float>* %color
- %72 = extractelement <4 x float> %71, i32 1
- %73 = fadd float %72, %70
- %74 = load <4 x float>* %color
- %color32 = insertelement <4 x float> %74, float %73, i32 1
- store <4 x float> %color32, <4 x float>* %color
- br label %ifmerge35
+ifmerge26: ; preds
= %ifmerge18, %ifmerge25
+ %65 = load <4 x float>* %color
+ %66 = extractelement <4 x float> %65, i32 1
+ %67 = load float addrspace(2)* @d4, !gla.uniform !5
+ %68 = fcmp olt float %66, %67
+ br i1 %68, label %then27, label %else29

-else33: ; preds = %ifmerge30
- %75 = load float addrspace(2)* @d4, !gla.uniform !5
- %76 = load <4 x float>* %color
- %77 = extractelement <4 x float> %76, i32 0
- %78 = fadd float %77, %75
- %79 = load <4 x float>* %color
- %color34 = insertelement <4 x float> %79, float %78, i32 0
- store <4 x float> %color34, <4 x float>* %color
- br label %ifmerge35
+then27: ; preds = %ifmerge26
+ %69 = load float addrspace(2)* @d4, !gla.uniform !5
+ %70 = load <4 x float>* %color
+ %71 = extractelement <4 x float> %70, i32 1
+ %72 = fadd float %71, %69
+ %73 = load <4 x float>* %color
+ %color28 = insertelement <4 x float> %73, float %72, i32 1
+ store <4 x float> %color28, <4 x float>* %color
+ br label %ifmerge31

-ifmerge35: ; preds
= %else33, %then31
- br label %loop-header14
+else29: ; preds = %ifmerge26
+ %74 = load float addrspace(2)* @d4, !gla.uniform !5
+ %75 = load <4 x float>* %color
+ %76 = extractelement <4 x float> %75, i32 0
+ %77 = fadd float %76, %74
+ %78 = load <4 x float>* %color
+ %color30 = insertelement <4 x float> %78, float %77, i32 0
+ store <4 x float> %color30, <4 x float>* %color
+ br label %ifmerge31

-post-loop-continue36: ; No predecessors!
- unreachable
+ifmerge31: ; preds
= %else29, %then27
+ br label %loop-header11

-loop-merge37: ; preds = %then15
- %80 = load <4 x float>* %color
- %color38 = fadd <4 x float> %80, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
- store <4 x float> %color38, <4 x float>* %color
+loop-merge32: ; preds = %then12
+ %79 = load <4 x float>* %color
+ %color33 = fadd <4 x float> %79, <float 1.000000e+00, float
1.000000e+00, float 1.000000e+00, float 1.000000e+00>
+ store <4 x float> %color33, <4 x float>* %color
%gl_FragColor = load <4 x float>* %color
store <4 x float> %gl_FragColor, <4 x float>* @gl_FragColor
br label %stage-epilogue

-stage-epilogue: ; preds = %loop-merge37
+stage-epilogue: ; preds = %loop-merge32
br label %stage-exit

stage-exit: ; preds = %stage-epilogue
=======================================
--- /trunk/test/baseResults/noUnroll.out Sat Aug 16 00:09:54 2014 UTC
+++ /trunk/test/baseResults/noUnroll.out Thu Jul 9 19:01:49 2015 UTC
@@ -12,8 +12,8 @@
color = BaseColor;
while (true) {
color1 = bigColor + color;
- bool H_6ao87e = color1.x >= d;
- if (H_6ao87e) {
+ bool H_1v5ao91 = color1.x < d;
+ if (! H_1v5ao91) {
break;
}

@@ -169,27 +169,27 @@
const vec4 C_vec4p0d33p = vec4(0.33);
const float C_42d0 = 42.0;
const vec4 C_vec4p1d0p = vec4(1.0);
-vec4 color81;
+vec4 color71;
const int C_0 = 0;
-vec4 colorb1;
+vec4 colora1;
const float C_20d0 = 20.0;
const float C_1d0 = 1.0;
const int C_41 = 41;
vec4 Lg_6;
const int C_1 = 1;
-vec4 select7;
vec4 select8;
+vec4 select9;
float Lg_7;
-vec4 colorf1;
+vec4 colore1;
const float C_0d0 = 0.0;
-vec4 colorg1;
-vec4 colori1;
+vec4 colorf1;
+vec4 colorh1;
const float C_2d0 = 2.0;
-vec4 colorj1;
+vec4 colori1;
const float C_5d0 = 5.0;
vec4 Lg_8;
const float C_10d0 = 10.0;
-vec4 colorp1;
+vec4 coloro1;

void main()
{
@@ -237,7 +237,6 @@
vec4 colorz;
vec4 color01;
vec4 color11;
- vec4 color21;
bool H_bghf2q1 = BaseColor.x < C_0d33;
bool H_9j9phn = BaseColor.x < C_0d66;
vec4 select = H_9j9phn ? C_vec4p0d66p : C_vec4p0d33p;
@@ -245,23 +244,23 @@
vec4 select2 = BaseColor + select1;
color = select2;
while (color.x < d) {
- vec4 color31 = bigColor + color;
- color = color31;
+ vec4 color21 = bigColor + color;
+ color = color21;
}

color1 = color;
while (color1.z < d) {
- vec4 color41 = bigColor1_1 + color1;
- bool H_ciwe3y = color41.w < d;
- vec4 color51 = bigColor1_1 + color41;
- vec4 select3 = H_ciwe3y ? color41 : color51;
+ vec4 color31 = bigColor1_1 + color1;
+ bool H_b19a7k = color31.w < d;
+ vec4 color41 = bigColor1_1 + color31;
+ vec4 select3 = H_b19a7k ? color31 : color41;
color1 = select3;
}

color2 = color1;
while (color2.x < C_42d0) {
- vec4 color61 = color2 + C_vec4p1d0p;
- color2 = color61;
+ vec4 color51 = color2 + C_vec4p1d0p;
+ color2 = color51;
}

color3 = color2;
@@ -273,43 +272,43 @@
break;
}

- vec4 color71 = bigColor1_2 + color3;
- color3 = color71;
+ vec4 color61 = bigColor1_2 + color3;
+ color3 = color61;
}

color4 = color3;
while (color4.z < d3) {
- color81 = bigColor1_3 + color4;
- bool H_aa30iq1 = color81.y < d4;
- if (H_aa30iq1) {
- color5 = color81;
+ color71 = bigColor1_3 + color4;
+ bool H_r8iyb71 = color71.y < d4;
+ if (H_r8iyb71) {
+ color5 = color71;
break;
}

- vec4 color91 = bigColor1_3 + color81;
- color4 = color91;
+ vec4 color81 = bigColor1_3 + color71;
+ color4 = color81;
}

color5 = color4;
color6 = color5;
i = C_0;
for (i = 0; i < Count; ++i) {
- vec4 colora1 = bigColor2 + color6;
- color6 = colora1;
+ vec4 color91 = bigColor2 + color6;
+ color6 = color91;
}

color7 = color6;
while (true) {
- colorb1 = bigColor3 + color7;
- bool H_epjgbn = colorb1.x >= d2;
- if (H_epjgbn) {
+ colora1 = bigColor3 + color7;
+ bool H_y14t7v1 = colora1.x < d2;
+ if (! H_y14t7v1) {
break;
}

- color7 = colorb1;
+ color7 = colora1;
}

- color8 = colorb1;
+ color8 = colora1;
Lg_1 = C_0;
for ( ; Lg_1 != 42; ++Lg_1) {
float H_mjhfad = color8.z + d3;
@@ -383,276 +382,271 @@
colord = colorc;
colore = colord;
while (true) {
- vec4 colorc1 = bigColor4 + colore;
- bool H_ijdwnl1 = colorc1.x < d4;
- if (H_ijdwnl1) {
- colorf = colorc1;
- } else {
- bool H_jno8xq1 = colorc1.y < d4;
- float H_wyxtie1 = colorc1.y + d4;
- vec4 H_cd5hos1 = colorc1;
- H_cd5hos1.y = H_wyxtie1;
- float H_dttg1m1 = colorc1.x + d4;
- vec4 H_cd5hos1r = colorc1;
- H_cd5hos1r.x = H_dttg1m1;
- select7 = H_jno8xq1 ? H_cd5hos1 : H_cd5hos1r;
- bool H_l1em9x = select7.z >= d4;
- if (H_l1em9x) {
- break;
- }
-
- colorf = select7;
+ vec4 colorb1 = bigColor4 + colore;
+ bool H_d8n1rz = colorb1.x < d4;
+ bool H_0hvytn = colorb1.y < d4;
+ float H_ft4i1t1 = colorb1.y + d4;
+ vec4 H_hbtye1 = colorb1;
+ H_hbtye1.y = H_ft4i1t1;
+ float H_qi2sqn1 = colorb1.x + d4;
+ vec4 H_hbtye1r = colorb1;
+ H_hbtye1r.x = H_qi2sqn1;
+ vec4 select7 = H_0hvytn ? H_hbtye1 : H_hbtye1r;
+ select8 = H_d8n1rz ? colorb1 : select7;
+ bool H_hxwloo = select8.z < d4;
+ if (! H_hxwloo) {
+ break;
}

- colore = colorf;
+ colore = select8;
}

- colorg = select7;
+ colorf = select8;
while (true) {
- vec4 colord1 = bigColor5 + colorg;
- bool H_pkmp2t1 = colord1.y < d5;
- float H_mov74t1 = colord1.y + d5;
- vec4 H_3f4hwu1 = colord1;
- H_3f4hwu1.y = H_mov74t1;
- select8 = H_pkmp2t1 ? H_3f4hwu1 : colord1;
- bool H_1bgbo9 = select8.x >= d5;
- if (H_1bgbo9) {
+ vec4 colorc1 = bigColor5 + colorf;
+ bool H_ky29nq1 = colorc1.y < d5;
+ float H_vnjtse1 = colorc1.y + d5;
+ vec4 H_cd5hos1 = colorc1;
+ H_cd5hos1.y = H_vnjtse1;
+ select9 = H_ky29nq1 ? H_cd5hos1 : colorc1;
+ bool H_5otk5o = select9.x < d5;
+ if (! H_5otk5o) {
break;
}

- colorg = select8;
+ colorf = select9;
}

- bool H_tg986f = select8.x < d6;
- if (H_tg986f) {
- colorh = select8;
- while (colorh.y < d6) {
- vec4 colore1 = bigColor6 + colorh;
- colorh = colore1;
+ bool H_8l0mbn = select9.x < d6;
+ if (H_8l0mbn) {
+ colorg = select9;
+ while (colorg.y < d6) {
+ vec4 colord1 = bigColor6 + colorg;
+ colorg = colord1;
}

- colorj = colorh;
+ colori = colorg;
} else {
- colori = select8;
- while (colori.z < d6) {
- float H_bkty18 = bigColor6.z + colori.z;
- vec4 H_bueoqy1 = colori;
- H_bueoqy1.z = H_bkty18;
- colori = H_bueoqy1;
+ colorh = select9;
+ while (colorh.z < d6) {
+ float H_k81hde1 = bigColor6.z + colorh.z;
+ vec4 H_c5togy1 = colorh;
+ H_c5togy1.z = H_k81hde1;
+ colorh = H_c5togy1;
}

- colorj = colori;
+ colori = colorh;
}

- bool H_ezf0u7 = colorj.x < d6;
- if (H_ezf0u7) {
+ bool H_p4jfbx1 = colori.x < d6;
+ if (H_p4jfbx1) {
bool H_lmykhx1 = d7 < C_1d0;
- colork = colorj;
- while (colork.y < d6) {
- colorf1 = bigColor6 + colork;
+ colorj = colori;
+ while (colorj.y < d6) {
+ colore1 = bigColor6 + colorj;
if (H_lmykhx1) {
- colorl = colorf1;
+ colork = colore1;
break;
}

- colork = colorf1;
+ colorj = colore1;
}

- colorl = colork;
- colorn = colorl;
+ colork = colorj;
+ colorm = colork;
} else {
- colorm = colorj;
- while (colorm.z < d6) {
- float H_zd2cjv = bigColor6.z + colorm.z;
- vec4 H_3nrit = colorm;
- H_3nrit.z = H_zd2cjv;
- colorm = H_3nrit;
+ colorl = colori;
+ while (colorl.z < d6) {
+ float H_wcfyex1 = bigColor6.z + colorl.z;
+ vec4 H_4y5jj = colorl;
+ H_4y5jj.z = H_wcfyex1;
+ colorl = H_4y5jj;
}

- colorn = colorm;
+ colorm = colorl;
}

bool H_2ecxn2 = d7 < C_0d0;
bool H_lmykhx1r = d7 < C_1d0;
- coloro = colorn;
+ colorn = colorm;
while (true) {
if (H_2ecxn2) {
- colorp = coloro;
+ coloro = colorn;
break;
}

- colorg1 = bigColor7 + coloro;
+ colorf1 = bigColor7 + colorn;
if (H_lmykhx1r) {
- float H_k5f2xg = C_1d0 + colorg1.z;
- vec4 H_wta1uz = colorg1;
- H_wta1uz.z = H_k5f2xg;
- colorp = H_wta1uz;
+ float H_5nb6mx1 = C_1d0 + colorf1.z;
+ vec4 H_1kqzpy = colorf1;
+ H_1kqzpy.z = H_5nb6mx1;
+ coloro = H_1kqzpy;
break;
}

- vec4 colorh1 = BaseColor + colorg1;
- coloro = colorh1;
+ vec4 colorg1 = BaseColor + colorf1;
+ colorn = colorg1;
}

bool H_zt4vz81 = d8 < C_0d0;
bool H_cokhy9 = d8 < C_1d0;
- colorq = colorp;
+ colorp = coloro;
while (true) {
if (H_zt4vz81) {
- colorr = colorq;
+ colorq = colorp;
break;
}

- colori1 = bigColor7 + colorq;
+ colorh1 = bigColor7 + colorp;
if (H_cokhy9) {
- float H_qktfc21 = C_1d0 + colori1.z;
+ float H_fjsmvh = C_1d0 + colorh1.z;
bool H_hrxnuy1 = d8 < C_2d0;
- float H_rv7g221 = C_1d0 + colori1.y;
- vec4 H_arow8u = colori1;
- H_arow8u.yz = vec2(H_rv7g221, H_qktfc21);
- float H_s6mgs11 = C_1d0 + colori1.x;
- vec4 H_arow8ur = colori1;
- H_arow8ur.xz = vec2(H_s6mgs11, H_qktfc21);
- vec4 select9 = H_hrxnuy1 ? H_arow8u : H_arow8ur;
- colorr = select9;
+ float H_e8em5i = C_1d0 + colorh1.y;
+ vec4 H_fh4v4t = colorh1;
+ H_fh4v4t.yz = vec2(H_e8em5i, H_fjsmvh);
+ float H_dxzlfi = C_1d0 + colorh1.x;
+ vec4 H_fh4v4tr = colorh1;
+ H_fh4v4tr.xz = vec2(H_dxzlfi, H_fjsmvh);
+ vec4 selecta = H_hrxnuy1 ? H_fh4v4t : H_fh4v4tr;
+ colorq = selecta;
break;
}

- colorj1 = BaseColor + colori1;
- bool H_2tsvnv = colorj1.z >= d8;
- if (H_2tsvnv) {
- colorr = colorj1;
+ colori1 = BaseColor + colorh1;
+ bool H_q6q6lh = colori1.z < d8;
+ if (! H_q6q6lh) {
+ colorq = colori1;
break;
}

- colorq = colorj1;
+ colorp = colori1;
}

bool H_45lodh = d9 > d8;
- colors = colorr;
- while (colors.w < d9) {
- coloru = colors;
+ colorr = colorq;
+ while (colorr.w < d9) {
+ colort = colorr;
if (H_45lodh) {
- bool H_mij56g1 = colors.x > d7;
- colort = colors;
- if (! H_mij56g1) {
- bool H_0nkq1l1 = colors.z == C_5d0;
- if (! H_0nkq1l1) {
+ bool H_bare6w1 = colorr.x > d7;
+ colors = colorr;
+ if (! H_bare6w1) {
+ bool H_thbawy = colorr.z == C_5d0;
+ if (! H_thbawy) {
break;
}

- float H_ysq1f = C_1d0 + colors.w;
- vec4 H_hosq2x1 = colors;
- H_hosq2x1.w = H_ysq1f;
- colort = H_hosq2x1;
+ float H_dbcm251 = C_1d0 + colorr.w;
+ vec4 H_iz6rsw1 = colorr;
+ H_iz6rsw1.w = H_dbcm251;
+ colors = H_iz6rsw1;
}

- coloru = colort;
+ colort = colors;
}

- colors = coloru;
+ colorr = colort;
}

- colorv = colors;
- while (colorv.z < d10) {
- float H_fdtvsq1 = C_1d0 + colorv.y;
- Lg_8 = colorv;
- Lg_8.y = H_fdtvsq1;
- bool H_d1wl9y = H_fdtvsq1 < d11;
- if (! H_d1wl9y) {
- vec4 colork1 = C_vec4p1d0p + Lg_8;
- colorw = colork1;
+ coloru = colorr;
+ while (coloru.z < d10) {
+ float H_imrx301 = C_1d0 + coloru.y;
+ Lg_8 = coloru;
+ Lg_8.y = H_imrx301;
+ bool H_o5kiav1 = H_imrx301 < d11;
+ if (! H_o5kiav1) {
+ vec4 colorj1 = C_vec4p1d0p + Lg_8;
+ colorv = colorj1;
break;
}

- float H_e2fv2r1 = C_1d0 + colorv.z;
- bool H_yfilct1 = colorv.w < d12;
- float H_139qou1 = C_1d0 + colorv.w;
+ float H_jx5ytz = C_1d0 + coloru.z;
+ bool H_j3w65o1 = coloru.w < d12;
+ float H_wwb38w = C_1d0 + coloru.w;
vec4 H_vbrigz = Lg_8;
- H_vbrigz.zw = vec2(H_e2fv2r1, H_139qou1);
- float H_go7wiq1 = C_1d0 + colorv.x;
+ H_vbrigz.zw = vec2(H_jx5ytz, H_wwb38w);
+ float H_hbdxd01 = C_1d0 + coloru.x;
vec4 H_vbrigzr = Lg_8;
- H_vbrigzr.xz = vec2(H_go7wiq1, H_e2fv2r1);
- vec4 selecta = H_yfilct1 ? H_vbrigz : H_vbrigzr;
- colorv = selecta;
+ H_vbrigzr.xz = vec2(H_hbdxd01, H_jx5ytz);
+ vec4 selectb = H_j3w65o1 ? H_vbrigz : H_vbrigzr;
+ coloru = selectb;
}

+ colorv = coloru;
colorw = colorv;
- colorx = colorw;
- while (colorx.x < C_10d0) {
- vec4 colorl1 = bigColor8 + colorx;
- bool H_psvrzf1 = colorl1.z < d8;
- bool H_6uqm261 = colorl1.w < d6;
- float H_62h82p = bigColor8.x + colorl1.y;
- vec4 H_zx9fa = colorl1;
- H_zx9fa.y = H_62h82p;
- vec4 selectb = H_6uqm261 ? colorl1 : H_zx9fa;
- vec4 selectc = H_psvrzf1 ? selectb : H_zx9fa;
- colorx = selectc;
+ while (colorw.x < C_10d0) {
+ vec4 colork1 = bigColor8 + colorw;
+ bool H_4hxxxc1 = colork1.z < d8;
+ bool H_nvrkke = colork1.w < d6;
+ float H_ldwisu1 = bigColor8.x + colork1.y;
+ vec4 H_cvcj3x1 = colork1;
+ H_cvcj3x1.y = H_ldwisu1;
+ vec4 selectc = H_nvrkke ? colork1 : H_cvcj3x1;
+ vec4 selectd = H_4hxxxc1 ? selectc : H_cvcj3x1;
+ colorw = selectd;
}

- vec4 colorm1 = C_vec4p1d0p + colorx;
- gl_FragColor = colorm1;
- colory = colorm1;
- while (colory.x < d14) {
- bool H_8va7wx1 = colory.y < d15;
- if (H_8va7wx1) {
+ vec4 colorl1 = C_vec4p1d0p + colorw;
+ gl_FragColor = colorl1;
+ colorx = colorl1;
+ while (colorx.x < d14) {
+ bool H_b9sdbr = colorx.y < d15;
+ if (H_b9sdbr) {
return;
}

- vec4 colorn1 = C_vec4p1d0p + colory;
- colory = colorn1;
+ vec4 colorm1 = C_vec4p1d0p + colorx;
+ colorx = colorm1;
}

- vec4 coloro1 = C_vec4p1d0p + colory;
- colorz = coloro1;
- while (colorz.w < d16) {
- float H_5vyu83 = C_1d0 + colorz.w;
- vec4 H_qfduku1 = colorz;
- H_qfduku1.w = H_5vyu83;
- colorz = H_qfduku1;
+ vec4 colorn1 = C_vec4p1d0p + colorx;
+ colory = colorn1;
+ while (colory.w < d16) {
+ float H_gd6sw71 = C_1d0 + colory.w;
+ vec4 H_rqruau1 = colory;
+ H_rqruau1.w = H_gd6sw71;
+ colory = H_rqruau1;
}

- color01 = colorz;
+ colorz = colory;
while (true) {
- bool notlhs1 = color01.w >= d2;
- bool notrhs1 = color01.y >= d3;
+ bool notlhs1 = colorz.w >= d2;
+ bool notrhs1 = colorz.y >= d3;
bool H_9acxdp1 = notrhs1 || notlhs1;
if (H_9acxdp1) {
- color11 = color01;
- while (color11.y >= d18) {
- colorp1 = C_vec4p1d0p + color11;
- bool H_ad9kt51 = colorp1.x >= d17;
- if (H_ad9kt51) {
- color21 = colorp1;
- while (color21.y < d16) {
- bool H_1r3e221 = color21.w < d16;
- if (H_1r3e221) {
+ color01 = colorz;
+ while (color01.y >= d18) {
+ coloro1 = C_vec4p1d0p + color01;
+ bool H_yayciw1 = coloro1.x < d17;
+ if (! H_yayciw1) {
+ color11 = coloro1;
+ while (color11.y < d16) {
+ bool H_an18n91 = color11.w < d16;
+ if (H_an18n91) {
discard;
}

- vec4 colorq1 = C_vec4p1d0p + color21;
- color21 = colorq1;
+ vec4 colorp1 = C_vec4p1d0p + color11;
+ color11 = colorp1;
}

- vec4 colorr1 = C_vec4p1d0p + color21;
- gl_FragColor = colorr1;
+ vec4 colorq1 = C_vec4p1d0p + color11;
+ gl_FragColor = colorq1;
return;
}

- color11 = colorp1;
+ color01 = coloro1;
}

return;
}

- vec4 colors1 = bigColor1_2 + color01;
- bool H_l3tys91 = colors1.z < d3;
- if (H_l3tys91) {
+ vec4 colorr1 = bigColor1_2 + colorz;
+ bool H_eafgoe1 = colorr1.z < d3;
+ if (H_eafgoe1) {
return;
}

- color01 = colors1;
+ colorz = colorr1;
}

}
=======================================
--- /trunk/test/baseResults/switch.frag.out Sat Jun 27 01:44:15 2015 UTC
+++ /trunk/test/baseResults/switch.frag.out Thu Jul 9 19:01:49 2015 UTC
@@ -10,11 +10,11 @@

define fastcc void @main() {
entry:
- %param96 = alloca i32
- %param95 = alloca <4 x float>
+ %param95 = alloca i32
%param94 = alloca <4 x float>
- %param89 = alloca i32
- %param88 = alloca <4 x float>
+ %param93 = alloca <4 x float>
+ %param88 = alloca i32
+ %param87 = alloca <4 x float>
%param = alloca <4 x float>
%j = alloca i32
%i = alloca i32
@@ -206,7 +206,7 @@
br i1 %35, label %then, label %ifmerge

then: ; preds = %loop-header
- br label %loop-merge80
+ br label %loop-merge79

post-loop-break: ; No predecessors!
unreachable
@@ -280,9 +280,6 @@
store i32 %j66, i32* %j
br label %loop-header58

-post-loop-continue: ; No predecessors!
- unreachable
-
loop-merge: ; preds
= %then63, %then59
br label %switch-merge55

@@ -299,7 +296,7 @@
unreachable

then75: ; preds = %switch-merge55
- br label %loop-merge80
+ br label %loop-merge79

post-loop-break76: ; No predecessors!
unreachable
@@ -310,64 +307,61 @@
store i32 %i78, i32* %i
br label %loop-header

-post-loop-continue79: ; No predecessors!
- unreachable
-
-loop-merge80: ; preds = %then75, %then
+loop-merge79: ; preds = %then75, %then
%53 = load i32 addrspace(2)* @c, !gla.uniform !1
- switch i32 %53, label %switch-merge83 [
- i32 1, label %switch-segment81
- i32 2, label %switch-segment82
+ switch i32 %53, label %switch-merge82 [
+ i32 1, label %switch-segment80
+ i32 2, label %switch-segment81
]

-switch-segment81: ; preds = %loop-merge80
+switch-segment80: ; preds = %loop-merge79
%54 = load float* @x
- %f84 = call float @llvm.gla.fSin.f32.f32(float %54), !gla.precision !9
+ %f83 = call float @llvm.gla.fSin.f32.f32(float %54), !gla.precision !9
%55 = load float* %f
- %f85 = fadd float %55, %f84, !gla.precision !9
- store float %f85, float* %f
- br label %switch-merge83
+ %f84 = fadd float %55, %f83, !gla.precision !9
+ store float %f84, float* %f
+ br label %switch-merge82

-switch-segment82: ; preds = %loop-merge80
- br label %switch-merge83
+switch-segment81: ; preds = %loop-merge79
+ br label %switch-merge82

-switch-merge83: ; preds
= %switch-segment82, %switch-segment81, %loop-merge80
+switch-merge82: ; preds
= %switch-segment81, %switch-segment80, %loop-merge79
%56 = load float* %f
%57 = load i32* %local
%58 = sitofp i32 %57 to float, !gla.precision !9
%color = fadd float %56, %58, !gla.precision !9
store float %color, float* @color
- %param90 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
- store <4 x float> %param90, <4 x float>* %param
- %param8891 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
- store <4 x float> %param8891, <4 x float>* %param88
- %param8992 = load i32 addrspace(2)* @c, !gla.uniform !1
- store i32 %param8992, i32* %param89
- %59 = call <4 x float> @"foo1(vf4;vf4;i1;"(<4 x float>* %param, <4 x
float>* %param88, i32* %param89)
+ %param89 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
+ store <4 x float> %param89, <4 x float>* %param
+ %param8790 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
+ store <4 x float> %param8790, <4 x float>* %param87
+ %param8891 = load i32 addrspace(2)* @c, !gla.uniform !1
+ store i32 %param8891, i32* %param88
+ %59 = call <4 x float> @"foo1(vf4;vf4;i1;"(<4 x float>* %param, <4 x
float>* %param87, i32* %param88)
%60 = extractelement <4 x float> %59, i32 1, !gla.precision !9
%61 = load float* @color
- %color93 = fadd float %61, %60, !gla.precision !9
- store float %color93, float* @color
+ %color92 = fadd float %61, %60, !gla.precision !9
+ store float %color92, float* @color
+ %param9396 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
+ store <4 x float> %param9396, <4 x float>* %param93
%param9497 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
store <4 x float> %param9497, <4 x float>* %param94
- %param9598 = load <4 x float> addrspace(2)* @v, !gla.uniform !4
- store <4 x float> %param9598, <4 x float>* %param95
- %param9699 = load i32 addrspace(2)* @c, !gla.uniform !1
- store i32 %param9699, i32* %param96
- %62 = call <4 x float> @"foo2(vf4;vf4;i1;"(<4 x float>* %param94, <4 x
float>* %param95, i32* %param96)
+ %param9598 = load i32 addrspace(2)* @c, !gla.uniform !1
+ store i32 %param9598, i32* %param95
+ %62 = call <4 x float> @"foo2(vf4;vf4;i1;"(<4 x float>* %param93, <4 x
float>* %param94, i32* %param95)
%63 = extractelement <4 x float> %62, i32 2, !gla.precision !9
%64 = load float* @color
- %color100 = fadd float %64, %63, !gla.precision !9
- store float %color100, float* @color
+ %color99 = fadd float %64, %63, !gla.precision !9
+ store float %color99, float* @color
br label %stage-epilogue

-post-switch-break86: ; No predecessors!
+post-switch-break85: ; No predecessors!
unreachable

-post-switch-break87: ; No predecessors!
+post-switch-break86: ; No predecessors!
unreachable

-stage-epilogue: ; preds = %switch-merge83
+stage-epilogue: ; preds = %switch-merge82
br label %stage-exit

stage-exit: ; preds = %stage-epilogue
@@ -618,7 +612,7 @@
br i1 %8, label %then, label %ifmerge

then: ; preds = %loop-header
- br label %loop-merge80
+ br label %loop-merge79

ifmerge: ; preds = %loop-header
switch i32 %local1, label %switch-segment54 [
@@ -667,28 +661,28 @@
br label %switch-merge55

then75: ; preds = %switch-merge55
- br label %loop-merge80
+ br label %loop-merge79

-loop-merge80: ; preds = %then75, %then
+loop-merge79: ; preds = %then75, %then
%f.10 = phi float [ %f.6, %then ], [ %f.7, %then75 ]
- switch i32 %local1, label %switch-merge83 [
- i32 1, label %switch-segment81
- i32 2, label %switch-segment82
+ switch i32 %local1, label %switch-merge82 [
+ i32 1, label %switch-segment80
+ i32 2, label %switch-segment81
]

-switch-segment81: ; preds = %loop-merge80
- %f85 = fadd float %f.10, %f56, !gla.precision !9
- br label %switch-merge83
+switch-segment80: ; preds = %loop-merge79
+ %f84 = fadd float %f.10, %f56, !gla.precision !9
+ br label %switch-merge82

-switch-segment82: ; preds = %loop-merge80
- br label %switch-merge83
+switch-segment81: ; preds = %loop-merge79
+ br label %switch-merge82

-switch-merge83: ; preds
= %switch-segment82, %switch-segment81, %loop-merge80
- %f.11 = phi float [ %f.10, %loop-merge80 ], [ %f.10, %switch-segment82
], [ %f85, %switch-segment81 ]
+switch-merge82: ; preds
= %switch-segment81, %switch-segment80, %loop-merge79
+ %f.11 = phi float [ %f.10, %loop-merge79 ], [ %f.10, %switch-segment81
], [ %f84, %switch-segment80 ]
%12 = sitofp i32 %local2 to float, !gla.precision !9
%color = fadd float %12, %f.11, !gla.precision !9
store float %color, float* @color, align 4
- %param90 = load <4 x float> addrspace(2)* @v, align 16, !gla.uniform !4
+ %param89 = load <4 x float> addrspace(2)* @v, align 16, !gla.uniform !4
switch i32 %local1, label %switch-merge.i [
i32 0, label %switch-segment.i
i32 2, label %switch-segment1.i
@@ -696,52 +690,52 @@
i32 3, label %switch-segment2.i
]

-switch-segment.i: ; preds = %switch-merge83
+switch-segment.i: ; preds = %switch-merge82
br label %"foo1(vf4;vf4;i1;.exit"

-switch-segment1.i: ; preds
= %switch-merge83, %switch-merge83
+switch-segment1.i: ; preds
= %switch-merge82, %switch-merge82
br label %"foo1(vf4;vf4;i1;.exit"

-switch-segment2.i: ; preds = %switch-merge83
- %13 = fmul <4 x float> %param90, %param90, !gla.precision !9
+switch-segment2.i: ; preds = %switch-merge82
+ %13 = fmul <4 x float> %param89, %param89, !gla.precision !9
br label %"foo1(vf4;vf4;i1;.exit"

-switch-merge.i: ; preds = %switch-merge83
+switch-merge.i: ; preds = %switch-merge82
br label %"foo1(vf4;vf4;i1;.exit"

"foo1(vf4;vf4;i1;.exit": ; preds
= %switch-merge.i, %switch-segment2.i, %switch-segment1.i, %switch-segment.i
- %14 = phi <4 x float> [ %param90, %switch-segment.i ],
[ %param90, %switch-segment1.i ], [ %13, %switch-segment2.i ], [
zeroinitializer, %switch-merge.i ]
+ %14 = phi <4 x float> [ %param89, %switch-segment.i ],
[ %param89, %switch-segment1.i ], [ %13, %switch-segment2.i ], [
zeroinitializer, %switch-merge.i ]
%15 = extractelement <4 x float> %14, i32 1, !gla.precision !9
- %color93 = fadd float %color, %15, !gla.precision !9
- store float %color93, float* @color, align 4
- switch i32 %local1, label %switch-merge.i104 [
- i32 0, label %switch-segment.i101
- i32 2, label %switch-segment1.i102
- i32 1, label %switch-segment2.i103
+ %color92 = fadd float %color, %15, !gla.precision !9
+ store float %color92, float* @color, align 4
+ switch i32 %local1, label %switch-merge.i103 [
+ i32 0, label %switch-segment.i100
+ i32 2, label %switch-segment1.i101
+ i32 1, label %switch-segment2.i102
i32 3, label %switch-segment3.i
]

-switch-segment.i101: ; preds
= %"foo1(vf4;vf4;i1;.exit"
+switch-segment.i100: ; preds
= %"foo1(vf4;vf4;i1;.exit"
br label %"foo2(vf4;vf4;i1;.exit"

-switch-segment1.i102: ; preds
= %"foo1(vf4;vf4;i1;.exit"
+switch-segment1.i101: ; preds
= %"foo1(vf4;vf4;i1;.exit"
br label %"foo2(vf4;vf4;i1;.exit"

-switch-segment2.i103: ; preds
= %"foo1(vf4;vf4;i1;.exit"
+switch-segment2.i102: ; preds
= %"foo1(vf4;vf4;i1;.exit"
br label %"foo2(vf4;vf4;i1;.exit"

switch-segment3.i: ; preds
= %"foo1(vf4;vf4;i1;.exit"
- %16 = fmul <4 x float> %param90, %param90, !gla.precision !9
+ %16 = fmul <4 x float> %param89, %param89, !gla.precision !9
br label %"foo2(vf4;vf4;i1;.exit"

-switch-merge.i104: ; preds
= %"foo1(vf4;vf4;i1;.exit"
+switch-merge.i103: ; preds
= %"foo1(vf4;vf4;i1;.exit"
br label %"foo2(vf4;vf4;i1;.exit"

-"foo2(vf4;vf4;i1;.exit": ; preds
= %switch-merge.i104, %switch-segment3.i, %switch-segment2.i103, %switch-segment1.i102, %switch-segment.i101
- %17 = phi <4 x float> [ %param90, %switch-segment.i101 ], [ <float
1.000000e+00, float 1.000000e+00, float 1.000000e+00, float
1.000000e+00>, %switch-segment1.i102 ], [ %param90, %switch-segment2.i103
], [ %16, %switch-segment3.i ], [ zeroinitializer, %switch-merge.i104 ]
+"foo2(vf4;vf4;i1;.exit": ; preds
= %switch-merge.i103, %switch-segment3.i, %switch-segment2.i102, %switch-segment1.i101, %switch-segment.i100
+ %17 = phi <4 x float> [ %param89, %switch-segment.i100 ], [ <float
1.000000e+00, float 1.000000e+00, float 1.000000e+00, float
1.000000e+00>, %switch-segment1.i101 ], [ %param89, %switch-segment2.i102
], [ %16, %switch-segment3.i ], [ zeroinitializer, %switch-merge.i103 ]
%18 = extractelement <4 x float> %17, i32 2, !gla.precision !9
- %color100 = fadd float %color93, %18, !gla.precision !9
- store float %color100, float* @color, align 4
+ %color99 = fadd float %color92, %18, !gla.precision !9
+ store float %color99, float* @color, align 4
br label %stage-epilogue

stage-epilogue: ; preds
= %"foo2(vf4;vf4;i1;.exit"
=======================================
--- /trunk/test/baseResults/whileLoop.frag.out Thu May 21 01:11:19 2015 UTC
+++ /trunk/test/baseResults/whileLoop.frag.out Thu Jul 9 19:01:49 2015 UTC
@@ -38,9 +38,6 @@
store <4 x float> %color2, <4 x float>* %color
br label %loop-header

-post-loop-continue: ; No predecessors!
- unreachable
-
loop-merge: ; preds = %then
%gl_FragColor = load <4 x float>* %color
store <4 x float> %gl_FragColor, <4 x float>* @gl_FragColor
Reply all
Reply to author
Forward
0 new messages