Issue 141622
Summary [AMDGPU] InstCombine moving freeze instructions breaks FMA formation
Labels new issue
Assignees
Reporter jayfoad
    This is a code quality issue that has been affecting some graphics workloads recently. The LLPC frontend tends to insert `freeze` instructions between `cmp` and conditional `br` instructions, to avoid undefined behavior if the condition is undef or poison. Then InstCombine moves the `freeze` instructions into places where they interfere with optimizations like FMA formation.

With this [test case](https://github.com/user-attachments/files/20460389/r.txt) I get this ISA including a `v_fma_f32` instruction:
```
$ llc -mtriple=amdgcn -mcpu=gfx1010 r.txt -o -
...
main:                                   ; @main
; %bb.0:                                ; %bb
	s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
	v_fma_f32 v0, v0, v1, 1.0
	v_cmp_lt_f32_e32 vcc_lo, 0, v0
	v_cndmask_b32_e64 v0, 0, 1, vcc_lo
	s_setpc_b64 s[30:31]
```
But after running it through InstCombine, I get separate `v_mul_f32` and `v_add_f32` instructions:
```
$ opt -passes=instcombine r.txt -o - | llc -mtriple=amdgcn -mcpu=gfx1010
...
main:                                   ; @main
; %bb.0:                                ; %bb
	s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
	v_mul_f32_e32 v0, v0, v1
	v_add_f32_e32 v0, 1.0, v0
	v_cmp_lt_f32_e32 vcc_lo, 0, v0
	v_cndmask_b32_e64 v0, 0, 1, vcc_lo
	s_setpc_b64 s[30:31]

```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to