From 56e49752b4258b89660825f2970a7e55067d7122 Mon Sep 17 00:00:00 2001 From: "Alon Zakai (kripken)" Date: Sat, 29 Jul 2017 19:00:37 -0700 Subject: do not swap elements in conditionalizeExpensiveOnBitwise if they invalidate each other - it is not enough to check side effects, we must check the interaction as well --- ...ons_optimize-level=2_ignore-implicit-traps.wast | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast') diff --git a/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast b/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast index e1215fa3f..7e8365812 100644 --- a/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast +++ b/test/passes/optimize-instructions_optimize-level=2_ignore-implicit-traps.wast @@ -259,5 +259,69 @@ (get_local $5) ) ) + (func $invalidate-conditionalizeExpensiveOnBitwise (param $0 i32) (param $1 i32) (result i32) + (if + (i32.eqz + (i32.and + (i32.lt_s + (i32.and + (i32.shr_s + (i32.shl + (i32.add + (get_local $1) ;; conflict with tee + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + (i32.const 3) + ) + (i32.ne + (tee_local $1 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (return (get_local $0)) + ) + (return (get_local $1)) + ) + (func $invalidate-conditionalizeExpensiveOnBitwise-ok (param $0 i32) (param $1 i32) (result i32) + (if + (i32.eqz + (i32.and + (i32.lt_s + (i32.and + (i32.shr_s + (i32.shl + (i32.add + (get_local $0) ;; no conflict + (i32.const -1) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 255) + ) + (i32.const 3) + ) + (i32.ne + (tee_local $1 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (return (get_local $0)) + ) + (return (get_local $1)) + ) ) -- cgit v1.2.3