1*4882a593SmuzhiyunFrom d672b64ae257e789311dfd0aea947972af64b966 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Romain Naour <romain.naour@gmail.com>
3*4882a593SmuzhiyunDate: Wed, 20 Jan 2021 23:26:29 +0100
4*4882a593SmuzhiyunSubject: [PATCH] Revert "re PR target/92095 (internal error with -O1
5*4882a593Smuzhiyun -mcpu=niagara2 -fPIE)"
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunThis reverts commit 0a83f1a441d7aaadecb368c237b6ee70bd7b91d6.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunBuilding the Buildroot defconfig qemu_sparc_ss10_defconfig using
10*4882a593Smuzhiyungcc 8.4, 9.3 and 10 produce a broken rootfs that trigger illegal
11*4882a593Smuzhiyuninstruction messages.
12*4882a593Smuzhiyun
13*4882a593Smuzhiyungcc 8.3, 9.2 are the latest working gcc version.
14*4882a593Smuzhiyungit bisect between gcc 8.4 and 8.4 allowed to identify
15*4882a593Smuzhiyunthe commit that introcuce the regression.
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunReverting this patch allowed to produce a working rootfs.
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunReported to gcc:
20*4882a593Smuzhiyunhttps://gcc.gnu.org/bugzilla/show_bug.cgi?id=98784
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunSigned-off-by: Romain Naour <romain.naour@gmail.com>
23*4882a593SmuzhiyunCc: Eric Botcazou <ebotcazou@gcc.gnu.org>
24*4882a593Smuzhiyun---
25*4882a593Smuzhiyun gcc/config/sparc/sparc-protos.h               |   1 -
26*4882a593Smuzhiyun gcc/config/sparc/sparc.c                      | 121 +++++++-----------
27*4882a593Smuzhiyun gcc/config/sparc/sparc.md                     |   5 +-
28*4882a593Smuzhiyun .../gcc.c-torture/compile/20191108-1.c        |  14 --
29*4882a593Smuzhiyun gcc/testsuite/gcc.target/sparc/overflow-3.c   |   2 +-
30*4882a593Smuzhiyun gcc/testsuite/gcc.target/sparc/overflow-4.c   |   2 +-
31*4882a593Smuzhiyun gcc/testsuite/gcc.target/sparc/overflow-5.c   |   2 +-
32*4882a593Smuzhiyun 7 files changed, 53 insertions(+), 94 deletions(-)
33*4882a593Smuzhiyun delete mode 100644 gcc/testsuite/gcc.c-torture/compile/20191108-1.c
34*4882a593Smuzhiyun
35*4882a593Smuzhiyundiff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h
36*4882a593Smuzhiyunindex 5f9999a669c..37452b06415 100644
37*4882a593Smuzhiyun--- a/gcc/config/sparc/sparc-protos.h
38*4882a593Smuzhiyun+++ b/gcc/config/sparc/sparc-protos.h
39*4882a593Smuzhiyun@@ -69,7 +69,6 @@ extern void sparc_split_reg_mem (rtx, rtx, machine_mode);
40*4882a593Smuzhiyun extern void sparc_split_mem_reg (rtx, rtx, machine_mode);
41*4882a593Smuzhiyun extern int sparc_split_reg_reg_legitimate (rtx, rtx);
42*4882a593Smuzhiyun extern void sparc_split_reg_reg (rtx, rtx, machine_mode);
43*4882a593Smuzhiyun-extern const char *output_load_pcrel_sym (rtx *);
44*4882a593Smuzhiyun extern const char *output_ubranch (rtx, rtx_insn *);
45*4882a593Smuzhiyun extern const char *output_cbranch (rtx, rtx, int, int, int, rtx_insn *);
46*4882a593Smuzhiyun extern const char *output_return (rtx_insn *);
47*4882a593Smuzhiyundiff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
48*4882a593Smuzhiyunindex 7cfa9f80676..3a721f19eb5 100644
49*4882a593Smuzhiyun--- a/gcc/config/sparc/sparc.c
50*4882a593Smuzhiyun+++ b/gcc/config/sparc/sparc.c
51*4882a593Smuzhiyun@@ -4243,6 +4243,13 @@ eligible_for_sibcall_delay (rtx_insn *trial)
52*4882a593Smuzhiyun static bool
53*4882a593Smuzhiyun sparc_cannot_force_const_mem (machine_mode mode, rtx x)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun+  /* After IRA has run in PIC mode, it is too late to put anything into the
56*4882a593Smuzhiyun+     constant pool if the PIC register hasn't already been initialized.  */
57*4882a593Smuzhiyun+  if ((lra_in_progress || reload_in_progress)
58*4882a593Smuzhiyun+      && flag_pic
59*4882a593Smuzhiyun+      && !crtl->uses_pic_offset_table)
60*4882a593Smuzhiyun+    return true;
61*4882a593Smuzhiyun+
62*4882a593Smuzhiyun   switch (GET_CODE (x))
63*4882a593Smuzhiyun     {
64*4882a593Smuzhiyun     case CONST_INT:
65*4882a593Smuzhiyun@@ -4278,11 +4285,9 @@ sparc_cannot_force_const_mem (machine_mode mode, rtx x)
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun /* Global Offset Table support.  */
69*4882a593Smuzhiyun-static GTY(()) rtx got_symbol_rtx = NULL_RTX;
70*4882a593Smuzhiyun-static GTY(()) rtx got_register_rtx = NULL_RTX;
71*4882a593Smuzhiyun static GTY(()) rtx got_helper_rtx = NULL_RTX;
72*4882a593Smuzhiyun-
73*4882a593Smuzhiyun-static GTY(()) bool got_helper_needed = false;
74*4882a593Smuzhiyun+static GTY(()) rtx got_register_rtx = NULL_RTX;
75*4882a593Smuzhiyun+static GTY(()) rtx got_symbol_rtx = NULL_RTX;
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun /* Return the SYMBOL_REF for the Global Offset Table.  */
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun@@ -4295,6 +4300,27 @@ sparc_got (void)
80*4882a593Smuzhiyun   return got_symbol_rtx;
81*4882a593Smuzhiyun }
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun+#ifdef HAVE_GAS_HIDDEN
84*4882a593Smuzhiyun+# define USE_HIDDEN_LINKONCE 1
85*4882a593Smuzhiyun+#else
86*4882a593Smuzhiyun+# define USE_HIDDEN_LINKONCE 0
87*4882a593Smuzhiyun+#endif
88*4882a593Smuzhiyun+
89*4882a593Smuzhiyun+static void
90*4882a593Smuzhiyun+get_pc_thunk_name (char name[32], unsigned int regno)
91*4882a593Smuzhiyun+{
92*4882a593Smuzhiyun+  const char *reg_name = reg_names[regno];
93*4882a593Smuzhiyun+
94*4882a593Smuzhiyun+  /* Skip the leading '%' as that cannot be used in a
95*4882a593Smuzhiyun+     symbol name.  */
96*4882a593Smuzhiyun+  reg_name += 1;
97*4882a593Smuzhiyun+
98*4882a593Smuzhiyun+  if (USE_HIDDEN_LINKONCE)
99*4882a593Smuzhiyun+    sprintf (name, "__sparc_get_pc_thunk.%s", reg_name);
100*4882a593Smuzhiyun+  else
101*4882a593Smuzhiyun+    ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", regno);
102*4882a593Smuzhiyun+}
103*4882a593Smuzhiyun+
104*4882a593Smuzhiyun /* Wrapper around the load_pcrel_sym{si,di} patterns.  */
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun static rtx
107*4882a593Smuzhiyun@@ -4314,78 +4340,30 @@ gen_load_pcrel_sym (rtx op0, rtx op1, rtx op2)
108*4882a593Smuzhiyun   return insn;
109*4882a593Smuzhiyun }
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun-/* Output the load_pcrel_sym{si,di} patterns.  */
112*4882a593Smuzhiyun-
113*4882a593Smuzhiyun-const char *
114*4882a593Smuzhiyun-output_load_pcrel_sym (rtx *operands)
115*4882a593Smuzhiyun-{
116*4882a593Smuzhiyun-  if (flag_delayed_branch)
117*4882a593Smuzhiyun-    {
118*4882a593Smuzhiyun-      output_asm_insn ("sethi\t%%hi(%a1-4), %0", operands);
119*4882a593Smuzhiyun-      output_asm_insn ("call\t%a2", operands);
120*4882a593Smuzhiyun-      output_asm_insn (" add\t%0, %%lo(%a1+4), %0", operands);
121*4882a593Smuzhiyun-    }
122*4882a593Smuzhiyun-  else
123*4882a593Smuzhiyun-    {
124*4882a593Smuzhiyun-      output_asm_insn ("sethi\t%%hi(%a1-8), %0", operands);
125*4882a593Smuzhiyun-      output_asm_insn ("add\t%0, %%lo(%a1-4), %0", operands);
126*4882a593Smuzhiyun-      output_asm_insn ("call\t%a2", operands);
127*4882a593Smuzhiyun-      output_asm_insn (" nop", NULL);
128*4882a593Smuzhiyun-    }
129*4882a593Smuzhiyun-
130*4882a593Smuzhiyun-  if (operands[2] == got_helper_rtx)
131*4882a593Smuzhiyun-    got_helper_needed = true;
132*4882a593Smuzhiyun-
133*4882a593Smuzhiyun-  return "";
134*4882a593Smuzhiyun-}
135*4882a593Smuzhiyun-
136*4882a593Smuzhiyun-#ifdef HAVE_GAS_HIDDEN
137*4882a593Smuzhiyun-# define USE_HIDDEN_LINKONCE 1
138*4882a593Smuzhiyun-#else
139*4882a593Smuzhiyun-# define USE_HIDDEN_LINKONCE 0
140*4882a593Smuzhiyun-#endif
141*4882a593Smuzhiyun-
142*4882a593Smuzhiyun /* Emit code to load the GOT register.  */
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun void
145*4882a593Smuzhiyun load_got_register (void)
146*4882a593Smuzhiyun {
147*4882a593Smuzhiyun-  rtx insn;
148*4882a593Smuzhiyun+  if (!got_register_rtx)
149*4882a593Smuzhiyun+    got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM);
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun   if (TARGET_VXWORKS_RTP)
152*4882a593Smuzhiyun-    {
153*4882a593Smuzhiyun-      if (!got_register_rtx)
154*4882a593Smuzhiyun-	got_register_rtx = pic_offset_table_rtx;
155*4882a593Smuzhiyun-
156*4882a593Smuzhiyun-      insn = gen_vxworks_load_got ();
157*4882a593Smuzhiyun-    }
158*4882a593Smuzhiyun+    emit_insn (gen_vxworks_load_got ());
159*4882a593Smuzhiyun   else
160*4882a593Smuzhiyun     {
161*4882a593Smuzhiyun-      if (!got_register_rtx)
162*4882a593Smuzhiyun-	got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM);
163*4882a593Smuzhiyun-
164*4882a593Smuzhiyun       /* The GOT symbol is subject to a PC-relative relocation so we need a
165*4882a593Smuzhiyun 	 helper function to add the PC value and thus get the final value.  */
166*4882a593Smuzhiyun       if (!got_helper_rtx)
167*4882a593Smuzhiyun 	{
168*4882a593Smuzhiyun 	  char name[32];
169*4882a593Smuzhiyun-
170*4882a593Smuzhiyun-	  /* Skip the leading '%' as that cannot be used in a symbol name.  */
171*4882a593Smuzhiyun-	  if (USE_HIDDEN_LINKONCE)
172*4882a593Smuzhiyun-	    sprintf (name, "__sparc_get_pc_thunk.%s",
173*4882a593Smuzhiyun-		     reg_names[REGNO (got_register_rtx)] + 1);
174*4882a593Smuzhiyun-	  else
175*4882a593Smuzhiyun-	    ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC",
176*4882a593Smuzhiyun-					 REGNO (got_register_rtx));
177*4882a593Smuzhiyun-
178*4882a593Smuzhiyun+	  get_pc_thunk_name (name, GLOBAL_OFFSET_TABLE_REGNUM);
179*4882a593Smuzhiyun 	  got_helper_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
180*4882a593Smuzhiyun 	}
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun-      insn
183*4882a593Smuzhiyun-	= gen_load_pcrel_sym (got_register_rtx, sparc_got (), got_helper_rtx);
184*4882a593Smuzhiyun+      emit_insn (gen_load_pcrel_sym (got_register_rtx, sparc_got (),
185*4882a593Smuzhiyun+				     got_helper_rtx));
186*4882a593Smuzhiyun     }
187*4882a593Smuzhiyun-
188*4882a593Smuzhiyun-  emit_insn (insn);
189*4882a593Smuzhiyun }
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun /* Ensure that we are not using patterns that are not OK with PIC.  */
192*4882a593Smuzhiyun@@ -5550,7 +5528,7 @@ save_local_or_in_reg_p (unsigned int regno, int leaf_function)
193*4882a593Smuzhiyun     return true;
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun   /* GOT register (%l7) if needed.  */
196*4882a593Smuzhiyun-  if (got_register_rtx && regno == REGNO (got_register_rtx))
197*4882a593Smuzhiyun+  if (regno == GLOBAL_OFFSET_TABLE_REGNUM && got_register_rtx)
198*4882a593Smuzhiyun     return true;
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun   /* If the function accesses prior frames, the frame pointer and the return
201*4882a593Smuzhiyun@@ -12658,9 +12636,10 @@ static void
202*4882a593Smuzhiyun sparc_file_end (void)
203*4882a593Smuzhiyun {
204*4882a593Smuzhiyun   /* If we need to emit the special GOT helper function, do so now.  */
205*4882a593Smuzhiyun-  if (got_helper_needed)
206*4882a593Smuzhiyun+  if (got_helper_rtx)
207*4882a593Smuzhiyun     {
208*4882a593Smuzhiyun       const char *name = XSTR (got_helper_rtx, 0);
209*4882a593Smuzhiyun+      const char *reg_name = reg_names[GLOBAL_OFFSET_TABLE_REGNUM];
210*4882a593Smuzhiyun #ifdef DWARF2_UNWIND_INFO
211*4882a593Smuzhiyun       bool do_cfi;
212*4882a593Smuzhiyun #endif
213*4882a593Smuzhiyun@@ -12697,22 +12676,17 @@ sparc_file_end (void)
214*4882a593Smuzhiyun #ifdef DWARF2_UNWIND_INFO
215*4882a593Smuzhiyun       do_cfi = dwarf2out_do_cfi_asm ();
216*4882a593Smuzhiyun       if (do_cfi)
217*4882a593Smuzhiyun-	output_asm_insn (".cfi_startproc", NULL);
218*4882a593Smuzhiyun+	fprintf (asm_out_file, "\t.cfi_startproc\n");
219*4882a593Smuzhiyun #endif
220*4882a593Smuzhiyun       if (flag_delayed_branch)
221*4882a593Smuzhiyun-	{
222*4882a593Smuzhiyun-	  output_asm_insn ("jmp\t%%o7+8", NULL);
223*4882a593Smuzhiyun-	  output_asm_insn (" add\t%%o7, %0, %0", &got_register_rtx);
224*4882a593Smuzhiyun-	}
225*4882a593Smuzhiyun+	fprintf (asm_out_file, "\tjmp\t%%o7+8\n\t add\t%%o7, %s, %s\n",
226*4882a593Smuzhiyun+		 reg_name, reg_name);
227*4882a593Smuzhiyun       else
228*4882a593Smuzhiyun-	{
229*4882a593Smuzhiyun-	  output_asm_insn ("add\t%%o7, %0, %0", &got_register_rtx);
230*4882a593Smuzhiyun-	  output_asm_insn ("jmp\t%%o7+8", NULL);
231*4882a593Smuzhiyun-	  output_asm_insn (" nop", NULL);
232*4882a593Smuzhiyun-	}
233*4882a593Smuzhiyun+	fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp\t%%o7+8\n\t nop\n",
234*4882a593Smuzhiyun+		 reg_name, reg_name);
235*4882a593Smuzhiyun #ifdef DWARF2_UNWIND_INFO
236*4882a593Smuzhiyun       if (do_cfi)
237*4882a593Smuzhiyun-	output_asm_insn (".cfi_endproc", NULL);
238*4882a593Smuzhiyun+	fprintf (asm_out_file, "\t.cfi_endproc\n");
239*4882a593Smuzhiyun #endif
240*4882a593Smuzhiyun     }
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun@@ -13207,10 +13181,7 @@ sparc_init_pic_reg (void)
243*4882a593Smuzhiyun   edge entry_edge;
244*4882a593Smuzhiyun   rtx_insn *seq;
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun-  /* In PIC mode, we need to always initialize the PIC register if optimization
247*4882a593Smuzhiyun-     is enabled, because we are called from IRA and LRA may later force things
248*4882a593Smuzhiyun-     to the constant pool for optimization purposes.  */
249*4882a593Smuzhiyun-  if (!flag_pic || (!crtl->uses_pic_offset_table && !optimize))
250*4882a593Smuzhiyun+  if (!crtl->uses_pic_offset_table)
251*4882a593Smuzhiyun     return;
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun   start_sequence ();
254*4882a593Smuzhiyundiff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
255*4882a593Smuzhiyunindex b242c4b4481..7d08f50705a 100644
256*4882a593Smuzhiyun--- a/gcc/config/sparc/sparc.md
257*4882a593Smuzhiyun+++ b/gcc/config/sparc/sparc.md
258*4882a593Smuzhiyun@@ -1603,7 +1603,10 @@
259*4882a593Smuzhiyun    (clobber (reg:P O7_REG))]
260*4882a593Smuzhiyun   "REGNO (operands[0]) == INTVAL (operands[3])"
261*4882a593Smuzhiyun {
262*4882a593Smuzhiyun-  return output_load_pcrel_sym (operands);
263*4882a593Smuzhiyun+  if (flag_delayed_branch)
264*4882a593Smuzhiyun+    return "sethi\t%%hi(%a1-4), %0\n\tcall\t%a2\n\t add\t%0, %%lo(%a1+4), %0";
265*4882a593Smuzhiyun+  else
266*4882a593Smuzhiyun+    return "sethi\t%%hi(%a1-8), %0\n\tadd\t%0, %%lo(%a1-4), %0\n\tcall\t%a2\n\t nop";
267*4882a593Smuzhiyun }
268*4882a593Smuzhiyun   [(set (attr "type") (const_string "multi"))
269*4882a593Smuzhiyun    (set (attr "length")
270*4882a593Smuzhiyundiff --git a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c b/gcc/testsuite/gcc.c-torture/compile/20191108-1.c
271*4882a593Smuzhiyundeleted file mode 100644
272*4882a593Smuzhiyunindex 7929751bb06..00000000000
273*4882a593Smuzhiyun--- a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c
274*4882a593Smuzhiyun+++ /dev/null
275*4882a593Smuzhiyun@@ -1,14 +0,0 @@
276*4882a593Smuzhiyun-/* PR target/92095 */
277*4882a593Smuzhiyun-/* Testcase by Sergei Trofimovich <slyfox@inbox.ru> */
278*4882a593Smuzhiyun-
279*4882a593Smuzhiyun-typedef union {
280*4882a593Smuzhiyun-  double a;
281*4882a593Smuzhiyun-  int b[2];
282*4882a593Smuzhiyun-} c;
283*4882a593Smuzhiyun-
284*4882a593Smuzhiyun-double d(int e)
285*4882a593Smuzhiyun-{
286*4882a593Smuzhiyun-  c f;
287*4882a593Smuzhiyun-  (&f)->b[0] = 15728640;
288*4882a593Smuzhiyun-  return e ? -(&f)->a : (&f)->a;
289*4882a593Smuzhiyun-}
290*4882a593Smuzhiyundiff --git a/gcc/testsuite/gcc.target/sparc/overflow-3.c b/gcc/testsuite/gcc.target/sparc/overflow-3.c
291*4882a593Smuzhiyunindex 52d6ab2b688..86dddfb09e6 100644
292*4882a593Smuzhiyun--- a/gcc/testsuite/gcc.target/sparc/overflow-3.c
293*4882a593Smuzhiyun+++ b/gcc/testsuite/gcc.target/sparc/overflow-3.c
294*4882a593Smuzhiyun@@ -1,6 +1,6 @@
295*4882a593Smuzhiyun /* { dg-do compile } */
296*4882a593Smuzhiyun /* { dg-require-effective-target lp64 } */
297*4882a593Smuzhiyun-/* { dg-options "-O -fno-pie" } */
298*4882a593Smuzhiyun+/* { dg-options "-O" } */
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun #include <stdbool.h>
301*4882a593Smuzhiyun #include <stdint.h>
302*4882a593Smuzhiyundiff --git a/gcc/testsuite/gcc.target/sparc/overflow-4.c b/gcc/testsuite/gcc.target/sparc/overflow-4.c
303*4882a593Smuzhiyunindex c6121b958c3..019feee335c 100644
304*4882a593Smuzhiyun--- a/gcc/testsuite/gcc.target/sparc/overflow-4.c
305*4882a593Smuzhiyun+++ b/gcc/testsuite/gcc.target/sparc/overflow-4.c
306*4882a593Smuzhiyun@@ -1,6 +1,6 @@
307*4882a593Smuzhiyun /* { dg-do compile } */
308*4882a593Smuzhiyun /* { dg-require-effective-target lp64 } */
309*4882a593Smuzhiyun-/* { dg-options "-O -fno-pie -mno-vis3 -mno-vis4" } */
310*4882a593Smuzhiyun+/* { dg-options "-O -mno-vis3 -mno-vis4" } */
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun #include <stdbool.h>
313*4882a593Smuzhiyun #include <stdint.h>
314*4882a593Smuzhiyundiff --git a/gcc/testsuite/gcc.target/sparc/overflow-5.c b/gcc/testsuite/gcc.target/sparc/overflow-5.c
315*4882a593Smuzhiyunindex f00283f6e7b..67d4ac38095 100644
316*4882a593Smuzhiyun--- a/gcc/testsuite/gcc.target/sparc/overflow-5.c
317*4882a593Smuzhiyun+++ b/gcc/testsuite/gcc.target/sparc/overflow-5.c
318*4882a593Smuzhiyun@@ -1,6 +1,6 @@
319*4882a593Smuzhiyun /* { dg-do compile } */
320*4882a593Smuzhiyun /* { dg-require-effective-target lp64 } */
321*4882a593Smuzhiyun-/* { dg-options "-O -fno-pie -mvis3" } */
322*4882a593Smuzhiyun+/* { dg-options "-O -mvis3" } */
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun #include <stdbool.h>
325*4882a593Smuzhiyun #include <stdint.h>
326*4882a593Smuzhiyun--
327*4882a593Smuzhiyun2.34.3
328*4882a593Smuzhiyun
329