packages feed

binaryen-0.0.5.0: binaryen/test/passes/optimize-instructions_optimize-level=2_all-features_ignore-implicit-traps.wast

(module
  (type $0 (func (param i32 i32) (result i32)))
  (memory $0 0)
  (func $conditionals (type $0) (param $0 i32) (param $1 i32) (result i32)
    (local $2 i32)
    (local $3 i32)
    (local $4 i32)
    (local $5 i32)
    (local $6 i32)
    (local $7 i32)
    (local.set $0
      (i32.const 0)
    )
    (loop $while-in
      (local.set $3
        (i32.const 0)
      )
      (loop $while-in6
        (local.set $6
          (i32.add
            (local.get $0)
            (i32.const 1)
          )
        )
        (local.set $0
          (if (result i32)
            (i32.or ;; this or is very expensive. we should compute one side, then see if we even need the other
              (i32.eqz
                (i32.rem_s
                  (i32.add
                    (i32.mul
                      (local.tee $7 ;; side effect, so we can't do this one
                        (i32.add
                          (local.get $0)
                          (i32.const 2)
                        )
                      )
                      (local.get $0)
                    )
                    (i32.const 17)
                  )
                  (i32.const 5)
                )
              )
              (i32.eqz
                (i32.rem_u
                  (i32.add
                    (i32.mul
                      (local.get $0)
                      (local.get $0)
                    )
                    (i32.const 11)
                  )
                  (i32.const 3)
                )
              )
            )
            (local.get $7)
            (local.get $6)
          )
        )
        (br_if $while-in6
          (i32.lt_s
            (local.tee $3
              (i32.add
                (local.get $3)
                (i32.const 1)
              )
            )
            (local.get $4)
          )
        )
      )
      (br_if $while-in
        (i32.ne
          (local.tee $1
            (i32.add
              (local.get $1)
              (i32.const 1)
            )
          )
          (i32.const 27000)
        )
      )
    )
    (return
      (local.get $5)
    )
  )
  (func $side-effect (type $0) (param $0 i32) (param $1 i32) (result i32)
    (local $2 i32)
    (local $3 i32)
    (local $4 i32)
    (local $5 i32)
    (local $6 i32)
    (local $7 i32)
    (local.set $0
      (i32.const 0)
    )
    (loop $while-in
      (local.set $3
        (i32.const 0)
      )
      (loop $while-in6
        (local.set $6
          (i32.add
            (local.get $0)
            (i32.const 1)
          )
        )
        (local.set $0
          (if (result i32)
            (i32.or ;; this or is very expensive, but has a side effect on both sides
              (i32.eqz
                (i32.rem_s
                  (i32.add
                    (i32.mul
                      (local.tee $7
                        (i32.add
                          (local.get $0)
                          (i32.const 0)
                        )
                      )
                      (local.get $0)
                    )
                    (i32.const 17)
                  )
                  (i32.const 5)
                )
              )
              (i32.eqz
                (i32.rem_u
                  (i32.add
                    (i32.mul
                      (local.get $0)
                      (local.get $0)
                    )
                    (unreachable)
                  )
                  (i32.const 3)
                )
              )
            )
            (local.get $7)
            (local.get $6)
          )
        )
        (br_if $while-in6
          (i32.lt_s
            (local.tee $3
              (i32.add
                (local.get $3)
                (i32.const 1)
              )
            )
            (local.get $4)
          )
        )
      )
      (br_if $while-in
        (i32.ne
          (local.tee $1
            (i32.add
              (local.get $1)
              (i32.const 1)
            )
          )
          (i32.const 27000)
        )
      )
    )
    (return
      (local.get $5)
    )
  )
  (func $flip (type $0) (param $0 i32) (param $1 i32) (result i32)
    (local $2 i32)
    (local $3 i32)
    (local $4 i32)
    (local $5 i32)
    (local $6 i32)
    (local $7 i32)
    (local.set $0
      (i32.const 0)
    )
    (loop $while-in
      (local.set $3
        (i32.const 0)
      )
      (loop $while-in6
        (local.set $6
          (i32.add
            (local.get $0)
            (i32.const 1)
          )
        )
        (local.set $0
          (if (result i32)
            (i32.or ;; this or is very expensive, and the first side has no side effect
              (i32.eqz
                (i32.rem_s
                  (i32.add
                    (i32.mul
                      (i32.eqz
                        (i32.add
                          (local.get $0)
                          (i32.const 0)
                        )
                      )
                      (local.get $0)
                    )
                    (i32.const 17)
                  )
                  (i32.const 5)
                )
              )
              (i32.eqz
                (i32.rem_u
                  (i32.add
                    (i32.mul
                      (local.get $0)
                      (local.get $0)
                    )
                    (i32.const 100)
                  )
                  (i32.const 3)
                )
              )
            )
            (local.get $7)
            (local.get $6)
          )
        )
        (br_if $while-in6
          (i32.lt_s
            (local.tee $3
              (i32.add
                (local.get $3)
                (i32.const 1)
              )
            )
            (local.get $4)
          )
        )
      )
      (br_if $while-in
        (i32.ne
          (local.tee $1
            (i32.add
              (local.get $1)
              (i32.const 1)
            )
          )
          (i32.const 27000)
        )
      )
    )
    (return
      (local.get $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
           (local.get $1) ;; conflict with tee
           (i32.const -1)
          )
          (i32.const 24)
         )
         (i32.const 24)
        )
        (i32.const 255)
       )
       (i32.const 3)
      )
      (i32.ne
       (local.tee $1
        (i32.const 0)
       )
       (i32.const 0)
      )
     )
    )
    (return (local.get $0))
   )
   (return (local.get $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
           (local.get $0) ;; no conflict
           (i32.const -1)
          )
          (i32.const 24)
         )
         (i32.const 24)
        )
        (i32.const 255)
       )
       (i32.const 3)
      )
      (i32.ne
       (local.tee $1
        (i32.const 0)
       )
       (i32.const 0)
      )
     )
    )
    (return (local.get $0))
   )
   (return (local.get $1))
  )

 (func $conditionalize-if-type-change (result f64)
  (local $0 i32)
  (drop
   (loop $label$1 (result f32)
    (block $label$2 (result f32)
     (drop
      (block $label$3 (result f32)
       (br_if $label$1
        (i32.or ;; this turns into an if, but then the if might not be unreachable
         (f32.gt
          (br_if $label$3
           (f32.const 1)
           (local.get $0)
          )
          (br $label$2
           (f32.const 71)
          )
         )
         (i64.eqz
          (select
           (i64.const 58)
           (i64.const -982757)
           (i64.eqz
            (i64.const 0)
           )
          )
         )
        )
       )
      )
     )
     (f32.const 1)
    )
   )
  )
  (f64.const -nan:0xfffffffffffff)
 )
 (func $optimize-bulk-memory-copy (param $dst i32) (param $src i32) (param $sz i32)
  (memory.copy  ;; nop
    (local.get $dst)
    (local.get $dst)
    (local.get $sz)
  )

  (memory.copy  ;; nop
    (local.get $dst)
    (local.get $src)
    (i32.const 0)
  )
 )
)