/* { dg-do compile } */ /* { dg-require-effective-target powerpc_vsx_ok } */ /* { dg-options "-O2 -fdump-tree-fre-all -mvsx" } */ /* Verify we remove a redundant load that occurs both before and after we call a vector load builtin. This testcase is introduced as we updated a number of our vector load built-ins with the attribute of PURE instead of MEM, to indicate that those builtins only read from memory, versus reading from and writing to the same. This means we can identify the redundant load instructions in an earlier pass, and optimize them away. */ #include vector signed short load_data; vector signed short foo() { vector signed short r11,r12,r13; r11 = load_data; r12 = vec_xl (0, &load_data[0]); r13 = load_data; return (r11 + r12 + r13); } vector signed short biz() { vector signed short r21,r22,r23; r21 = load_data; r22 = vec_lvehx (0, &load_data[0]); r23 = load_data; return (r21 + r22 + r23); } vector signed short bar() { vector signed short r31,r32,r33; r31 = load_data; r32 = vec_lvx (0, &load_data[0]); r33 = load_data; return (r31 + r32 + r33); } /* { dg-final { scan-tree-dump-times "Removing dead stmt r13_. = load_data;" 1 "fre1" } } */ /* { dg-final { scan-tree-dump-times "Removing dead stmt r23_. = load_data;" 1 "fre1" } } */ /* { dg-final { scan-tree-dump-times "Removing dead stmt r33_. = load_data;" 1 "fre1" } } */