Hi Haochen, on 2023/4/14 09:34, HAO CHEN GUI wrote: > Hi Kewen, > > 在 2023/4/13 16:32, Kewen.Lin 写道: >> xfail all powerpc*-*-* can have some XPASSes on those ENVs with >> software emulation. Since the related hw insn xscmpuqp is guarded >> with TARGET_FLOAT128_HW, could we use the effective target >> ppc_float128_hw instead? > > Thanks for your review comments. It's tricky. It invokes "__lekf2" > with "-mno-float128_hw". But it doesn't always pass the check. > With math library on P8, it can. With the library on P9, it fails.
Math library doesn't provide it, __lekf2 is from libgcc (GCC itself). The reason why the __lekf2 behaves differently on P8 and P9 is that we have SW and HW versions for __lekf2, when the underlying "CPU "supports 128-bit IEEE binary floating point instructions.", it will use __lekf2_hw instead of __lekf2_sw, the former still adopts insn xscmpuqp, then it fails. > So it's totally depended on the version of library which is not > controlled by GCC. What's your opinion? So 1) for ppc_float128_hw, it generates xscmpuqp then fails. 2) for !ppc_float128_hw, it uses __lekf2 but the underlying ENV supports __builtin_cpu_supports ("ieee128"), it exploits xscmpuqp, then fails. Ideally we should use one effective target like ppc_ieee128_hw to indicate the underlying ENV supports __builtin_cpu_supports ("ieee128") but I think it may not be worth to adding that at this stage, so I'd suggest xfail-ing it for "ppc_float128_hw || (ppc_cpu_supports_hw && p9vector_hw)". BR, Kewen > > Test result on P9 > make check-gcc-c RUNTESTFLAGS="--target_board=unix'{-mno-float128-hardware}' > dg-torture.exp=float128-cmp-invalid.c" > > FAIL: gcc.dg/torture/float128-cmp-invalid.c -O0 execution test > FAIL: gcc.dg/torture/float128-cmp-invalid.c -O1 execution test > FAIL: gcc.dg/torture/float128-cmp-invalid.c -O2 execution test > FAIL: gcc.dg/torture/float128-cmp-invalid.c -O3 -g execution test > FAIL: gcc.dg/torture/float128-cmp-invalid.c -Os execution test > FAIL: gcc.dg/torture/float128-cmp-invalid.c -O2 -flto > -fno-use-linker-plugin -flto-partition=none execution test > FAIL: gcc.dg/torture/float128-cmp-invalid.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects execution test > > === gcc Summary === > > # of expected passes 7 > # of unexpected failures 7 > > Gui Haochen > Thanks