Issue 90457
Summary Missed optimization for dead store of 'v1': v1=v2; result=arr[0]; v1=1;
Labels new issue
Assignees
Reporter ZY546
    reduced code:
https://godbolt.org/z/b8TPh9xjn
```cpp
extern signed char v1;
signed char v2; 
unsigned short result;

void func(unsigned short arr [20]) {
    v1 = v2;
    result = arr [0]; 
    v1 = 1;
}
```

Clang -O3:
```llvm
define dso_local void @func(unsigned short*)(ptr nocapture noundef readonly %arr) local_unnamed_addr {
entry:
  tail call void @llvm.dbg.value(metadata ptr %arr, metadata !23, metadata !DIExpression())
  %0 = load i8, ptr @v2, align 1
  store i8 %0, ptr @v1, align 1
  %1 = load i16, ptr %arr, align 2
  store i16 %1, ptr @result, align 2
  store i8 1, ptr @v1, align 1
  ret void
}
```
```asm
func(unsigned short*): # @func(unsigned short*)
        movzx   eax, byte ptr [rip + v2]
        mov     rcx, qword ptr [rip + v1@GOTPCREL]
 mov     byte ptr [rcx], al
        movzx   eax, word ptr [rdi]
 mov     word ptr [rip + result], ax
        mov     byte ptr [rcx], 1
 ret
```

Expected code:
```asm
func(unsigned short*):
        movzx   eax, WORD PTR [rdi]
        mov     BYTE PTR v1[rip], 1
        mov     WORD PTR result[rip], ax
 ret
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to