[WebAssembly] Reverse the order of operands for br_if
authorDerek Schuff <dschuff@google.com>
Mon, 16 Nov 2015 21:04:51 +0000 (21:04 +0000)
committerDerek Schuff <dschuff@google.com>
Mon, 16 Nov 2015 21:04:51 +0000 (21:04 +0000)
Summary: This is to match the new version in the spec

Reviewers: sunfish

Subscribers: jfb, llvm-commits, dschuff

Differential Revision: http://reviews.llvm.org/D14519

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253249 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/WebAssembly/WebAssemblyInstrControl.td
lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp
test/CodeGen/WebAssembly/cfg-stackify.ll

index af73a93..dd63e98 100644 (file)
@@ -13,9 +13,9 @@
 //===----------------------------------------------------------------------===//
 
 let isBranch = 1, isTerminator = 1, hasCtrlDep = 1 in {
-def BR_IF : I<(outs), (ins bb_op:$dst, I32:$a),
+def BR_IF : I<(outs), (ins I32:$a, bb_op:$dst),
               [(brcond I32:$a, bb:$dst)],
-              "br_if\t$dst, $a">;
+               "br_if\t$a, $dst">;
 let isBarrier = 1 in {
 def BR   : I<(outs), (ins bb_op:$dst),
              [(br bb:$dst)],
index fe27b1a..ed30b53 100644 (file)
@@ -54,8 +54,8 @@ bool WebAssemblyInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
     case WebAssembly::BR_IF:
       if (HaveCond)
         return true;
-      Cond.push_back(MI.getOperand(1));
-      TBB = MI.getOperand(0).getMBB();
+      Cond.push_back(MI.getOperand(0));
+      TBB = MI.getOperand(1).getMBB();
       HaveCond = true;
       break;
     case WebAssembly::BR:
@@ -105,8 +105,8 @@ unsigned WebAssemblyInstrInfo::InsertBranch(
   }
 
   BuildMI(&MBB, DL, get(WebAssembly::BR_IF))
-      .addMBB(TBB)
-      .addOperand(Cond[0]);
+      .addOperand(Cond[0])
+      .addMBB(TBB);
   if (!FBB)
     return 1;
 
index 44b8cd0..4570c27 100644 (file)
@@ -67,9 +67,9 @@ back:
 
 ; CHECK-LABEL: test2:
 ; CHECK: block BB2_2{{$}}
-; CHECK: br_if BB2_2, {{.*}}
+; CHECK: br_if {{.*}}, BB2_2{{$}}
 ; CHECK: BB2_1:
-; CHECK: br_if BB2_1, (get_local 10){{$}}
+; CHECK: br_if (get_local 10), BB2_1{{$}}
 ; CHECK: BB2_2:
 ; CHECK: return{{$}}
 define void @test2(double* nocapture %p, i32 %n) {
@@ -101,10 +101,10 @@ for.end:
 ; CHECK: block BB3_5{{$}}
 ; CHECK: block BB3_4{{$}}
 ; CHECK: block BB3_2{{$}}
-; CHECK: br_if BB3_2, (get_local 4){{$}}
+; CHECK: br_if (get_local 4), BB3_2{{$}}
 ; CHECK: br BB3_5{{$}}
 ; CHECK: BB3_2:
-; CHECK: br_if BB3_4, (get_local 6){{$}}
+; CHECK: br_if (get_local 6), BB3_4{{$}}
 ; CHECK: br BB3_5{{$}}
 ; CHECK: BB3_4:
 ; CHECK: BB3_5:
@@ -134,7 +134,7 @@ exit:
 
 ; CHECK-LABEL: triangle:
 ; CHECK: block BB4_2{{$}}
-; CHECK: br_if BB4_2, (get_local 3){{$}}
+; CHECK: br_if (get_local 3), BB4_2{{$}}
 ; CHECK: BB4_2:
 ; CHECK: return (get_local 2){{$}}
 define i32 @triangle(i32* %p, i32 %a) {
@@ -153,7 +153,7 @@ exit:
 ; CHECK-LABEL: diamond:
 ; CHECK: block BB5_3{{$}}
 ; CHECK: block BB5_2{{$}}
-; CHECK: br_if BB5_2, (get_local 3){{$}}
+; CHECK: br_if (get_local 3), BB5_2{{$}}
 ; CHECK: br BB5_3{{$}}
 ; CHECK: BB5_2:
 ; CHECK: BB5_3:
@@ -201,7 +201,7 @@ loop:
 ; CHECK-NOT: br
 ; CHECK: BB8_1:
 ; CHECK: loop BB8_2{{$}}
-; CHECK: br_if BB8_1, (get_local 3){{$}}
+; CHECK: br_if (get_local 3), BB8_1{{$}}
 ; CHECK: return (get_local 2){{$}}
 define i32 @simple_loop(i32* %p, i32 %a) {
 entry:
@@ -219,8 +219,8 @@ exit:
 ; CHECK-LABEL: doubletriangle:
 ; CHECK: block BB9_4{{$}}
 ; CHECK: block BB9_3{{$}}
-; CHECK: br_if BB9_4, (get_local 4){{$}}
-; CHECK: br_if BB9_3, (get_local 6){{$}}
+; CHECK: br_if (get_local 4), BB9_4{{$}}
+; CHECK: br_if (get_local 6), BB9_3{{$}}
 ; CHECK: BB9_3:
 ; CHECK: BB9_4:
 ; CHECK: return (get_local 3){{$}}
@@ -247,10 +247,10 @@ exit:
 ; CHECK-LABEL: ifelse_earlyexits:
 ; CHECK: block BB10_4{{$}}
 ; CHECK: block BB10_2{{$}}
-; CHECK: br_if BB10_2, (get_local 4){{$}}
+; CHECK: br_if (get_local 4), BB10_2{{$}}
 ; CHECK: br BB10_4{{$}}
 ; CHECK: BB10_2:
-; CHECK: br_if BB10_4, (get_local 6){{$}}
+; CHECK: br_if (get_local 6), BB10_4{{$}}
 ; CHECK: BB10_4:
 ; CHECK: return (get_local 3){{$}}
 define i32 @ifelse_earlyexits(i32 %a, i32 %b, i32* %p) {