[PATCH,rs6000] Fix error in Power9 code generation for vpermr instruction
Kelvin Nilsen
kdnilsen@linux.vnet.ibm.com
Wed Jun 29 21:43:00 GMT 2016
Testing on a Power9 simulator revealed an error in the code emitted for
the *altivec_vpermr_<mode>_internal define_insn pattern. Two of the
operands of the vpermr operand had been emitted in wrong order. This
patch corrects the error.
Testing of this patch on a Power9 simulator demonstrates that this
patch corrects all of the following tests, which had been failing on
the simulator prior to this patch:
g++ tests
> PASS: c-c++-common/torture/vector-subscript-1.c -O1 execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O2 execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -Os execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O1 execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O2 execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O3 -g execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -Os execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: g++.dg/torture/vshuf-v16qi.C -O0 execution test
> PASS: g++.dg/torture/vshuf-v16qi.C -O1 execution test
> PASS: g++.dg/torture/vshuf-v16qi.C -O2 execution test
> PASS: g++.dg/torture/vshuf-v16qi.C -Os execution test
> PASS: g++.dg/torture/vshuf-v16qi.C -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: g++.dg/torture/vshuf-v16qi.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: g++.dg/torture/vshuf-v2di.C -O0 execution test
> PASS: g++.dg/torture/vshuf-v2di.C -O1 execution test
> PASS: g++.dg/torture/vshuf-v2di.C -O2 execution test
> PASS: g++.dg/torture/vshuf-v2di.C -Os execution test
> PASS: g++.dg/torture/vshuf-v2di.C -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: g++.dg/torture/vshuf-v2di.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: g++.dg/torture/vshuf-v4si.C -O0 execution test
> PASS: g++.dg/torture/vshuf-v4si.C -O1 execution test
> PASS: g++.dg/torture/vshuf-v4si.C -O2 execution test
> PASS: g++.dg/torture/vshuf-v4si.C -Os execution test
> PASS: g++.dg/torture/vshuf-v4si.C -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: g++.dg/torture/vshuf-v4si.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: g++.dg/torture/vshuf-v8hi.C -O0 execution test
> PASS: g++.dg/torture/vshuf-v8hi.C -O1 execution test
> PASS: g++.dg/torture/vshuf-v8hi.C -O2 execution test
> PASS: g++.dg/torture/vshuf-v8hi.C -Os execution test
> PASS: g++.dg/torture/vshuf-v8hi.C -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: g++.dg/torture/vshuf-v8hi.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: g++.old-deja/g++.other/sizeof4.C -std=c++14 (test for errors, line 34)
> PASS: g++.old-deja/g++.other/sizeof4.C -std=c++14 (test for excess errors)
gcc tests:
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O0 execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O1 execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O2 execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O3 -g execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -Os execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: gcc.c-torture/execute/scal-to-vec1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O1 execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O2 execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -Os execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: c-c++-common/torture/vector-subscript-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O1 execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O2 execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O3 -g execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -Os execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
> PASS: c-c++-common/torture/vector-subscript-2.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
The patch has bootstrapped and regression tested on
powerpc64le-unknown-linux with no regressions. Is this ok
for the trunk and for backporting to GCC6 after burn-in
on the trunk?
Thanks.
gcc/ChangeLog:
2016-06-29 Kelvin Nilsen <kelvin@gcc.gnu.org>
* config/rs6000/altivec.md (*altivec_vpermr_<mode>_internal):
Exchange the order of the second and third operands in the vpermr
instruction tmeplate.
Index: gcc/config/rs6000/altivec.md
===================================================================
--- gcc/config/rs6000/altivec.md (revision 237799)
+++ gcc/config/rs6000/altivec.md (working copy)
@@ -2072,7 +2072,7 @@
UNSPEC_VPERMR))]
"TARGET_P9_VECTOR"
"@
- vpermr %0,%1,%2,%3
+ vpermr %0,%2,%1,%3
xxpermr %x0,%x2,%x3"
[(set_attr "type" "vecperm")
(set_attr "length" "4")])
More information about the Gcc-patches
mailing list