https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103605
Bug ID: 103605 Summary: [PowerPC] fmin/fmax should be inlined always with xsmindp/xsmaxdp Product: gcc Version: 11.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: pc at gcc dot gnu.org Target Milestone: --- -- $ gcc --version gcc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-2) [...] $ gcc -c -O2 fmin.c && objdump -dr fmin.o 0: 00 00 4c 3c addis r2,r12,0 0: R_PPC64_REL16_HA .TOC. 4: 00 00 42 38 addi r2,r2,0 4: R_PPC64_REL16_LO .TOC.+0x4 8: a6 02 08 7c mflr r0 c: 10 00 01 f8 std r0,16(r1) 10: e1 ff 21 f8 stdu r1,-32(r1) 14: 01 00 00 48 bl 14 <fm+0x14> 14: R_PPC64_REL24 fmin 18: 00 00 00 60 nop 1c: 20 00 21 38 addi r1,r1,32 20: 10 00 01 e8 ld r0,16(r1) 24: a6 03 08 7c mtlr r0 28: 20 00 80 4e blr $ gcc -c -O2 fmin.c -ffast-math && objdump -dr fmin.o 0: 40 14 21 f0 xsmincdp vs1,vs1,vs2 4: 20 00 80 4e blr -- And it appears that a better instruction choice in the above case is xsmindp, and it can be used with and without "-ffast-math", as it matches the semantics required of fmin. Similarly, xsmaxdp with fmax.