[llvm] r254271 - [WebAssembly] Set several MCInstrDesc flags.

Dan Gohman via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 29 14:59:19 PST 2015


Author: djg
Date: Sun Nov 29 16:59:19 2015
New Revision: 254271

URL: http://llvm.org/viewvc/llvm-project?rev=254271&view=rev
Log:
[WebAssembly] Set several MCInstrDesc flags.

Modified:
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrConv.td
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrFloat.td
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInteger.td

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrConv.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrConv.td?rev=254271&r1=254270&r2=254271&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrConv.td (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrConv.td Sun Nov 29 16:59:19 2015
@@ -26,6 +26,8 @@ def I64_EXTEND_U_I32 : I<(outs I64:$dst)
                          [(set I64:$dst, (zext I32:$src))],
                          "i64.extend_u/i32\t$dst, $src">;
 
+// Conversion from floating point to integer traps on overflow and invalid.
+let hasSideEffects = 1 in {
 def I32_TRUNC_S_F32 : I<(outs I32:$dst), (ins F32:$src),
                         [(set I32:$dst, (fp_to_sint F32:$src))],
                         "i32.trunc_s/f32\t$dst, $src">;
@@ -50,6 +52,7 @@ def I64_TRUNC_S_F64 : I<(outs I64:$dst),
 def I64_TRUNC_U_F64 : I<(outs I64:$dst), (ins F64:$src),
                         [(set I64:$dst, (fp_to_uint F64:$src))],
                         "i64.trunc_u/f64\t$dst, $src">;
+} // hasSideEffects = 1
 
 def F32_CONVERT_S_I32 : I<(outs F32:$dst), (ins I32:$src),
                           [(set F32:$dst, (sint_to_fp I32:$src))],

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrFloat.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrFloat.td?rev=254271&r1=254270&r2=254271&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrFloat.td (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrFloat.td Sun Nov 29 16:59:19 2015
@@ -14,8 +14,10 @@
 
 let Defs = [ARGUMENTS] in {
 
+let isCommutable = 1 in
 defm ADD : BinaryFP<fadd, "add ">;
 defm SUB : BinaryFP<fsub, "sub ">;
+let isCommutable = 1 in
 defm MUL : BinaryFP<fmul, "mul ">;
 defm DIV : BinaryFP<fdiv, "div ">;
 defm SQRT : UnaryFP<fsqrt, "sqrt">;
@@ -24,8 +26,10 @@ defm ABS : UnaryFP<fabs, "abs ">;
 defm NEG : UnaryFP<fneg, "neg ">;
 defm COPYSIGN : BinaryFP<fcopysign, "copysign">;
 
+let isCommutable = 1 in {
 defm MIN : BinaryFP<fminnan, "min ">;
 defm MAX : BinaryFP<fmaxnan, "max ">;
+} // isCommutable = 1
 
 defm CEIL : UnaryFP<fceil, "ceil">;
 defm FLOOR : UnaryFP<ffloor, "floor">;
@@ -40,8 +44,10 @@ def : Pat<(frint f64:$src), (NEAREST_F64
 
 let Defs = [ARGUMENTS] in {
 
+let isCommutable = 1 in {
 defm EQ : ComparisonFP<SETOEQ, "eq  ">;
 defm NE : ComparisonFP<SETUNE, "ne  ">;
+} // isCommutable = 1
 defm LT : ComparisonFP<SETOLT, "lt  ">;
 defm LE : ComparisonFP<SETOLE, "le  ">;
 defm GT : ComparisonFP<SETOGT, "gt  ">;

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td?rev=254271&r1=254270&r2=254271&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td Sun Nov 29 16:59:19 2015
@@ -115,6 +115,7 @@ defm : LOCAL<I64>;
 defm : LOCAL<F32>;
 defm : LOCAL<F64>;
 
+let isMoveImm = 1 in {
 def CONST_I32 : I<(outs I32:$res), (ins i32imm:$imm),
                   [(set I32:$res, imm:$imm)],
                   "i32.const\t$res, $imm">;
@@ -127,6 +128,7 @@ def CONST_F32 : I<(outs F32:$res), (ins
 def CONST_F64 : I<(outs F64:$res), (ins f64imm:$imm),
                   [(set F64:$res, fpimm:$imm)],
                   "f64.const\t$res, $imm">;
+} // isMoveImm = 1
 
 } // Defs = [ARGUMENTS]
 

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInteger.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInteger.td?rev=254271&r1=254270&r2=254271&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInteger.td (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInteger.td Sun Nov 29 16:59:19 2015
@@ -16,22 +16,31 @@ let Defs = [ARGUMENTS] in {
 
 // The spaces after the names are for aesthetic purposes only, to make
 // operands line up vertically after tab expansion.
+let isCommutable = 1 in
 defm ADD : BinaryInt<add, "add ">;
 defm SUB : BinaryInt<sub, "sub ">;
+let isCommutable = 1 in
 defm MUL : BinaryInt<mul, "mul ">;
+// Divide and remainder trap on a zero denominator.
+let hasSideEffects = 1 in {
 defm DIV_S : BinaryInt<sdiv, "div_s">;
 defm DIV_U : BinaryInt<udiv, "div_u">;
 defm REM_S : BinaryInt<srem, "rem_s">;
 defm REM_U : BinaryInt<urem, "rem_u">;
+} // hasSideEffects = 1
+let isCommutable = 1 in {
 defm AND : BinaryInt<and, "and ">;
 defm OR : BinaryInt<or, "or  ">;
 defm XOR : BinaryInt<xor, "xor ">;
+} // isCommutable = 1
 defm SHL : BinaryInt<shl, "shl ">;
 defm SHR_U : BinaryInt<srl, "shr_u">;
 defm SHR_S : BinaryInt<sra, "shr_s">;
 
+let isCommutable = 1 in {
 defm EQ : ComparisonInt<SETEQ, "eq  ">;
 defm NE : ComparisonInt<SETNE, "ne  ">;
+} // isCommutable = 1
 defm LT_S : ComparisonInt<SETLT, "lt_s">;
 defm LE_S : ComparisonInt<SETLE, "le_s">;
 defm LT_U : ComparisonInt<SETULT, "lt_u">;




More information about the llvm-commits mailing list