[llvm] [MIPS] Sign-extend subwords when expanding atomic max/min (PR #89246)
    YunQiang Su via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Apr 19 00:10:56 PDT 2024
    
    
  
================
@@ -1118,6 +1118,8 @@ define i16 @test_max_16(ptr nocapture %ptr, i16 signext %val) {
 ; MIPSEL-NEXT:    srav $7, $7, $10
 ; MIPSEL-NEXT:    seh $2, $2
 ; MIPSEL-NEXT:    seh $7, $7
+; MIPSEL-NEXT:    sllv $2, $2, $10
----------------
wzssyqa wrote:
And `sllv` here may make the result incorrect.
The return value should be a signed int16, while with `sllv` it will be (`sign int16`)<<$10.
Note, $10 here contains the offset of a int16 in the a word, it may be `0` or `16`.
I guess the reason we do it is that we have only `ll`, while no `llb/llh`.
https://github.com/llvm/llvm-project/pull/89246
    
    
More information about the llvm-commits
mailing list