gcc.target/aarch64/sve/pre_cond_share_1.c started failing after
r15-276-gbed6ec161be8c5ca.  However, that was incidental.
The test's inner loop is duplicated by -fswitch-loops and
that patch happened to change the copy of the loop that was
not the original focus of the test.

The test was added as part of r14-4713-g4b39aeef594f311e (patch A).
Before patch A we had:

  mask__109.48_201 = vect_distbb_170.43_191 < vect_cst__200;
  _263 = .COND_MUL (mask__109.48_201, vect_iftmp.45_195, vect_cst__198, { 0.0, 
... });
  vect_prephitmp_153.50_205 = .VCOND (vect_distbb_170.43_191, { 0.0, ... }, 
_263, vect_cst__198, 112);

which, expanding the .VCOND, is equivalent to:

  mask__102.46_197 = vect_distbb_170.43_191 >= { 0.0, ... };
  mask__109.48_201 = vect_distbb_170.43_191 < vect_cst__200;
  _263 = .COND_MUL (mask__109.48_201, vect_iftmp.45_195, vect_cst__198, { 0.0, 
... });
  vect_prephitmp_153.50_205 = mask__102.46_197 ? _263 : vect_cst__198

After patch A we had:

  mask__102.46_197 = vect_distbb_170.43_191 >= { 0.0, ... };
  mask__109.48_201 = vect_distbb_170.43_191 < vect_cst__200;
  _70 = mask__102.46_197 & mask__109.48_201;
  vect_prephitmp_153.50_205 = .COND_MUL (_70, vect_iftmp.45_195, vect_cst__198, 
{ 0.0, ... });

But this changes the behaviour when vect_distbb_170.43_191 < { 0.0, ... }.
In that case, the original code would pick an else value of vect_cst__198,
whereas the new code would pick an else value of { 0.0, ... }.

That was fixed in r14-8668-g8123f3ca3fd89103 (PR113607, patch B),
but fixing the bug (rightly) reverted the code to the previous output.
Patch B therefore XFAILed the thing that patch A was originally testing.

Since the test was added for patch A and since patch A seems to generate
incorrect code for the test, I think we should just remove it.

I'll leave this for a day or so for comments/corrections.

Richard


gcc/testsuite/
        PR testsuite/115248
        * gcc.target/aarch64/sve/pre_cond_share_1.c: Delete
---
 .../gcc.target/aarch64/sve/pre_cond_share_1.c | 132 ------------------
 1 file changed, 132 deletions(-)
 delete mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pre_cond_share_1.c

diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pre_cond_share_1.c 
b/gcc/testsuite/gcc.target/aarch64/sve/pre_cond_share_1.c
deleted file mode 100644
index e4f754d739c..00000000000
--- a/gcc/testsuite/gcc.target/aarch64/sve/pre_cond_share_1.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-Ofast -fdump-tree-optimized" } */
-
-#include <stdint.h>
-#include <stddef.h>
-#include <math.h>
-#include <float.h>
-
-typedef struct __attribute__((__packed__)) _Atom {
-    float x, y, z;
-    int32_t type;
-} Atom;
-
-typedef struct __attribute__((__packed__)) _FFParams {
-    int32_t hbtype;
-    float radius;
-    float hphb;
-    float elsc;
-} FFParams;
-
-#ifndef PPWI
-#define PPWI (64)
-#endif
-
-#ifndef ITERS
-#define ITERS 8
-#endif
-
-#define DIFF_TOLERANCE_PCT 0.025f
-
-#define POSES_SIZE 393216
-#define PROTEIN_SIZE 938
-#define LIGAND_SIZE 26
-#define FORCEFIELD_SIZE 34
-
-#define ZERO 0.0f
-#define QUARTER 0.25f
-#define HALF 0.5f
-#define ONE 1.0f
-#define TWO 2.0f
-#define FOUR 4.0f
-#define CNSTNT 45.0f
-
-// Energy evaluation parameters
-#define HBTYPE_F 70
-#define HBTYPE_E 69
-#define HARDNESS 38.0f
-#define NPNPDIST 5.5f
-#define NPPDIST 1.0f
-
-void
-fasten_main(size_t group, size_t ntypes, size_t nposes, size_t natlig, size_t 
natpro,        //
-            const Atom *protein, const Atom *ligand,                           
              //
-            const float *transforms_0, const float *transforms_1, const float 
*transforms_2, //
-            const float *transforms_3, const float *transforms_4, const float 
*transforms_5, //
-            const FFParams *forcefield, float *energies                        
              //
-) {
-
-    float etot[PPWI];
-    float lpos_x[PPWI];
-
-    for (int l = 0; l < PPWI; l++) {
-        etot[l] = 0.f;
-        lpos_x[l] = 0.f;
-    }
-
-    // Loop over ligand atoms
-    for (int il = 0; il < natlig; il++) {
-        // Load ligand atom data
-        const Atom l_atom = ligand[il];
-        const FFParams l_params = forcefield[l_atom.type];
-        const int lhphb_ltz = l_params.hphb < 0.f;
-        const int lhphb_gtz = l_params.hphb > 0.f;
-
-        // Transform ligand atom
-
-        // Loop over protein atoms
-        for (int ip = 0; ip < natpro; ip++) {
-            // Load protein atom data
-            const Atom p_atom = protein[ip];
-            const FFParams p_params = forcefield[p_atom.type];
-
-            const float radij = p_params.radius + l_params.radius;
-            const float r_radij = ONE / radij;
-
-            const float elcdst = (p_params.hbtype == HBTYPE_F && 
l_params.hbtype == HBTYPE_F) ? FOUR
-                                                                               
               : TWO;
-            const float elcdst1 = (p_params.hbtype == HBTYPE_F && 
l_params.hbtype == HBTYPE_F)
-                                  ? QUARTER : HALF;
-            const int type_E = ((p_params.hbtype == HBTYPE_E || 
l_params.hbtype == HBTYPE_E));
-
-            const int phphb_ltz = p_params.hphb < 0.f;
-            const int phphb_gtz = p_params.hphb > 0.f;
-            const int phphb_nz = p_params.hphb != 0.f;
-            const float p_hphb = p_params.hphb * (phphb_ltz && lhphb_gtz ? 
-ONE : ONE);
-            const float l_hphb = l_params.hphb * (phphb_gtz && lhphb_ltz ? 
-ONE : ONE);
-            const float distdslv = (phphb_ltz ? (lhphb_ltz ? NPNPDIST : 
NPPDIST) : (lhphb_ltz
-                                                                               
     ? NPPDIST
-                                                                               
     : -FLT_MAX));
-            const float r_distdslv = ONE / distdslv;
-
-            const float chrg_init = l_params.elsc * p_params.elsc;
-            const float dslv_init = p_hphb + l_hphb;
-
-            for (int l = 0; l < PPWI; l++) {
-                // Calculate distance between atoms
-                const float x = lpos_x[l] - p_atom.x;
-                const float distij = (x * x);
-
-                // Calculate the sum of the sphere radii
-                const float distbb = distij - radij;
-
-                const int zone1 = (distbb < ZERO);
-
-                // Calculate formal and dipole charge interactions
-                float chrg_e = chrg_init * ((zone1 ? ONE : (ONE - distbb * 
elcdst1)) *
-                                            (distbb < elcdst ? ONE : ZERO));
-                float neg_chrg_e = -fabsf(chrg_e);
-                chrg_e = type_E ? neg_chrg_e : chrg_e;
-                etot[l] += chrg_e * CNSTNT;
-            }
-        }
-    }
-
-    // Write result
-    for (int l = 0; l < PPWI; l++) {
-        energies[group * PPWI + l] = etot[l] * HALF;
-    }
-}
-
-/* { dg-final { scan-tree-dump-times {\.COND_MUL} 1 "optimized" } } */
-/* { dg-final { scan-tree-dump-times {\.VCOND} 1 "optimized" { xfail *-*-* } } 
} */
-- 
2.25.1

Reply via email to