https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101129

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Optimized difference:
--- pr101129.c.244t.optimized.r11-5838  2021-06-18 22:40:20.915971652 +0200
+++ pr101129.c.244t.optimized.r11-5839  2021-06-18 22:40:34.739789553 +0200
@@ -8,6 +8,7 @@ void foo0 (u32 u32_0, U * ret)
   __int128 _1;
   vector(16) unsigned char _2;
   unsigned char _3;
+  vector(16) <signed-boolean:8> _4;
   vector(16) signed char _5;
   __int128 _6;
   __int128 _7;
@@ -31,7 +32,8 @@ void foo0 (u32 u32_0, U * ret)
   _14 = u32_0_13(D) & 4;
   _3 = (unsigned char) _14;
   _2 = {_3, _3, _3, _3, _3, _3, _3, _3, _3, _3, _3, _3, _3, _3, _3, _3};
-  _5 = .VCONDU (_2, { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 108);
+  _4 = _2 < { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+  _5 = VIEW_CONVERT_EXPR<vector(16) signed char>(_4);
   _6 = VIEW_CONVERT_EXPR<__int128>(_5);
   u128_2_15 = _1 * _6;
   _7 = u128_2_15 >> 64;
Assembly difference:
--- pr101129.s.r11-5838 2021-06-18 22:40:20.919971599 +0200
+++ pr101129.s.r11-5839 2021-06-18 22:40:34.743789500 +0200
@@ -14,19 +14,16 @@ foo0:
        .localentry     foo0,.-foo0
        rlwinm 9,3,0,29,29
        mtvsrd 32,9
-       vspltb 0,0,7
+       vspltb 1,0,7
        addis 9,2,.LC0@toc@ha
        addi 9,9,.LC0@toc@l
-       lxvd2x 33,0,9
-       vcmpgtub 0,1,0
-       addi 9,1,-16
-       xxpermdi 32,32,32,2
-       stxvd2x 32,0,9
-       ld 9,-8(1)
-       ld 10,-16(1)
+       lxvd2x 32,0,9
+       vcmpgtub 0,0,1
+       mfvsrd 11,32
+       xxpermdi 0,32,32,3
+       mfvsrd 10,0
+       add 10,11,10
        mulld 10,10,3
-       mulhdu 3,3,9
-       add 10,10,3
        addis 9,2,.LANCHOR0@toc@ha
        lbz 9,.LANCHOR0@toc@l(9)
        add 10,10,9

Reply via email to