diff --git a/src/sksl/SkSLByteCodeGenerator.cpp b/src/sksl/SkSLByteCodeGenerator.cpp
index 4f69a41..c724483 100644
--- a/src/sksl/SkSLByteCodeGenerator.cpp
+++ b/src/sksl/SkSLByteCodeGenerator.cpp
@@ -751,22 +751,29 @@
 }
 
 void ByteCodeGenerator::writeIfStatement(const IfStatement& i) {
-    // TODO: For if-else, reorder the statements to remove kNot.
-    //       For if w/o else, remove the trailing branch.
-    this->writeExpression(*i.fTest);
-    this->write(ByteCodeInstruction::kNot);
-    this->align(2, 1);
-    this->write(ByteCodeInstruction::kConditionalBranch);
-    DeferredLocation elseLocation(this);
-    this->writeStatement(*i.fIfTrue);
-    this->align(2, 1);
-    this->write(ByteCodeInstruction::kBranch);
-    DeferredLocation endLocation(this);
-    elseLocation.set();
     if (i.fIfFalse) {
+        // if (test) { ..ifTrue.. } else { .. ifFalse .. }
+        this->writeExpression(*i.fTest);
+        this->align(2, 1);
+        this->write(ByteCodeInstruction::kConditionalBranch);
+        DeferredLocation trueLocation(this);
         this->writeStatement(*i.fIfFalse);
+        this->align(2, 1);
+        this->write(ByteCodeInstruction::kBranch);
+        DeferredLocation endLocation(this);
+        trueLocation.set();
+        this->writeStatement(*i.fIfTrue);
+        endLocation.set();
+    } else {
+        // if (test) { ..ifTrue.. }
+        this->writeExpression(*i.fTest);
+        this->write(ByteCodeInstruction::kNot);
+        this->align(2, 1);
+        this->write(ByteCodeInstruction::kConditionalBranch);
+        DeferredLocation endLocation(this);
+        this->writeStatement(*i.fIfTrue);
+        endLocation.set();
     }
-    endLocation.set();
 }
 
 void ByteCodeGenerator::writeReturnStatement(const ReturnStatement& r) {
