<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/63388>63388</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [WASM] "signext" attribute leads miscompilation
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          doit-man
      </td>
    </tr>
</table>

<pre>
    ```
define i32 @foo(i1 signext noundef %cond, i32 noundef %y) {
  %e = zext i1 %cond to i32
  %r = sub i32 %y, %e
  ret i32 %r
}
```
Compiling with ``` llc --march=wasm32 -filetype=obj {ll} -o {obj} ```, ```wasm-ld --no-entry --export-all --allow-undefined {obj} -o {wasm}```

```
(module
 (type (;0;) (func))
  (type (;1;) (func (param i32 i32) (result i32)))
 (func $__wasm_call_ctors (type 0))
  (func $src (type 1) (param i32 i32) (result i32)
    local.get 1
    local.get 0
    i32.add)
  (func $tgt (type 1) (param i32 i32) (result i32)
    i32.const 77)
  (memory (;0;) 2)
  (global $__stack_pointer (mut i32) (i32.const 66560))
 (global (;1;) i32 (i32.const 1024))
  (global (;2;) i32 (i32.const 1024))
  (global (;3;) i32 (i32.const 1024))
  (global (;4;) i32 (i32.const 66560))
  (global (;5;) i32 (i32.const 1024))
  (global (;6;) i32 (i32.const 66560))
  (global (;7;) i32 (i32.const 131072))
 (global (;8;) i32 (i32.const 0))
  (global (;9;) i32 (i32.const 1))
 (export "memory" (memory 0))
  (export "__wasm_call_ctors" (func $__wasm_call_ctors))
  (export "src" (func $src))
  (export "tgt" (func $tgt))
  (export "__dso_handle" (global 1))
  (export "__data_end" (global 2))
  (export "__stack_low" (global 3))
 (export "__stack_high" (global 4))
  (export "__global_base" (global 5))
  (export "__heap_base" (global 6))
  (export "__heap_end" (global 7))
  (export "__memory_base" (global 8))
  (export "__table_base" (global 9)))
```

The first argument of the function should subtract the second argument, but in wasm, it appears to be performing addition.
``` signext ``` attribute leads this miscompilation. whitout ``` signext ``` compilation is correct.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyklk1vszgQxz-Nc7GIwE4MOXBoG_W2p11pj5GxHXDXYGQP26f76Vc2JIG8VeojRSEZ5jf_mTHGw73XdadUibavaLtf8QEa60ppNSQt71aVlV8lYun0SfcofZHqqDuFNSUYbdKjtYgUOsMx0C_AnR06qY4Yka2wnUTkLbrOzF-I7DDKX8dwOJgURnSP_wu8zk4oBhvQmZuLbn6oRvUY6i3yJyen4HTPjTaU76cfyzLebNtro7saf2po8PkuNkbgJGm5Ew2i-0_uW0pwctRGwVevEN3b6iOkbwzK9zix4betPsKfi0RI6_QnhEiMxEnS2UR14L5wkqhfvXWQcGNwEr7tZxIbpDslZxHH8CFCqGNZwd2yEClaKwdz6ggiRUg7XBF9TRF9jd0nxXHoBCK78Dk3eO6aLV3DteeOt7G9YVnGe075wcBkWMS7gJvDIVRwENyYgwDr_FkrvUnhxHgnzl7ZJPZ9AlMcjI0V3KxrBTi7Z0wvRk3Jmkt5Pwuo4XeyCLGF7TzgPF8KtKq17utqWcjSpza24mZsoAcu_jn0VnegXAwwwEz_IsTYlqXXC3GONF_ZcZ_M0Cwlm5v1WKDk5yj9Obp5hN7WesNufy7LfkM2fyhLszQnT9eneMR-o7l7qHktN758MCJkfAwRIbNn8lbm4n-zkyf04U5_Ess7cUVHy0N_qOHKP1qe5Cq9PTS8k0ZN4NSv7DnFgR9UOLrmDHnKjNvT2M8lRB93_sQ0um6W0O1jOadGp0PF_VVR26dYo3h_B2LfQzedyJ8y40N0R6p4igGvjLpD7a6Olbtn4F-NwkftPGDu6qFVHWB7xBCsQydA2w77xg5GhtkBHBcQb3oVx4wTEw7tKrxVOxwP3DC5AOZ9r7jzYRipFO6VO1rXhrGBS6lD6PVVYudJ6GLhAE5XAyhsFJceQ6M9brUXcQbhMQr-bDTYYY7dBpoBWHssrHNKwJTBSpZU7uiOr1SZsSLPiowVbNWUlFWEkSLdVhllLJNbwja7jClGxTYXXK50SVJCU5btMko3G7bO8mpH85RxKVJWEII2qWq5Nmtj_m3X1tUr7f2gSkZpUawMr5TxpxnSlcEpqYbao01qtAd_wUCDidPm3y9__oG2-_geGMsM637dqGWPVoMzZQPQe0RfEHlH5L3W0AzVWtgWkfegMl2S3tkPJQCR95ipR-Q9Jvt_AAAA__-B8wn1">