1  /* { dg-do run { target { { i?86-*-* x86_64-*-* } && lp64 } } } */
       2  
       3  /* Verify that we can have multiple __RTL functions in one test case.
       4     Each of these __RTL functions returns a const, dumped immediately after
       5     expand.  */
       6  
       7  extern void abort (void);
       8  
       9  int __RTL (startwith ("vregs")) test_return_42 (void)
      10  {
      11    /* C code:
      12       return 42; */
      13  (function "test_return_42"
      14    (insn-chain
      15      (cnote 1 NOTE_INSN_DELETED)
      16      (block 2
      17        (edge-from entry (flags "FALLTHRU"))
      18        (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
      19        (cnote 2 NOTE_INSN_FUNCTION_BEG)
      20        (cinsn 5 (set (reg:SI <0> [ _1 ])
      21                      (const_int 42)) "../../src/test-return-const.c":3)
      22        (cinsn 8 (set (reg:SI <1> [ <retval> ])
      23                      (reg:SI <0> [ _1 ])) "../../src/test-return-const.c":3)
      24        (cinsn 12 (set (reg/i:SI ax)
      25                      (reg:SI <1> [ <retval> ])) "../../src/test-return-const.c":4)
      26        (cinsn 13 (use (reg/i:SI ax)) "../../src/test-return-const.c":4)
      27        (edge-to exit (flags "FALLTHRU"))
      28      ) ;; block 2
      29    ) ;; insn-chain
      30    (crtl
      31      (return_rtx 
      32        (reg/i:SI ax)
      33      ) ;; return_rtx
      34    ) ;; crtl
      35  ) ;; function "test_return_42"
      36  }
      37  
      38  int __RTL (startwith ("vregs")) test_return_43 (void)
      39  {
      40    /* C code:
      41       return 43; */
      42  (function "test_return_43"
      43    (insn-chain
      44      (cnote 1 NOTE_INSN_DELETED)
      45      (block 2
      46        (edge-from entry (flags "FALLTHRU"))
      47        (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
      48        (cnote 2 NOTE_INSN_FUNCTION_BEG)
      49        (cinsn 5 (set (reg:SI <0> [ _1 ])
      50                      (const_int 43)) "../../src/test-return-const.c":3)
      51        (cinsn 8 (set (reg:SI <1> [ <retval> ])
      52                      (reg:SI <0> [ _1 ])) "../../src/test-return-const.c":3)
      53        (cinsn 12 (set (reg/i:SI ax)
      54                      (reg:SI <1> [ <retval> ])) "../../src/test-return-const.c":4)
      55        (cinsn 13 (use (reg/i:SI ax)) "../../src/test-return-const.c":4)
      56        (edge-to exit (flags "FALLTHRU"))
      57      ) ;; block 2
      58    ) ;; insn-chain
      59    (crtl
      60      (return_rtx 
      61        (reg/i:SI ax)
      62      ) ;; return_rtx
      63    ) ;; crtl
      64  ) ;; function "test_return_43"
      65  }
      66  
      67  int __RTL (startwith ("vregs")) test_return_44 (void)
      68  {
      69    /* C code:
      70       return 44; */
      71  (function "test_return_44"
      72    (insn-chain
      73      (cnote 1 NOTE_INSN_DELETED)
      74      (block 2
      75        (edge-from entry (flags "FALLTHRU"))
      76        (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
      77        (cnote 2 NOTE_INSN_FUNCTION_BEG)
      78        (cinsn 5 (set (reg:SI <0> [ _1 ])
      79                      (const_int 44)) "../../src/test-return-const.c":3)
      80        (cinsn 8 (set (reg:SI <1> [ <retval> ])
      81                      (reg:SI <0> [ _1 ])) "../../src/test-return-const.c":3)
      82        (cinsn 12 (set (reg/i:SI ax)
      83                      (reg:SI <1> [ <retval> ])) "../../src/test-return-const.c":4)
      84        (cinsn 13 (use (reg/i:SI ax)) "../../src/test-return-const.c":4)
      85        (edge-to exit (flags "FALLTHRU"))
      86      ) ;; block 2
      87    ) ;; insn-chain
      88    (crtl
      89      (return_rtx 
      90        (reg/i:SI ax)
      91      ) ;; return_rtx
      92    ) ;; crtl
      93  ) ;; function "test_return_44"
      94  }
      95  
      96  int main (void)
      97  {
      98    if (test_return_42 () != 42)
      99      abort ();
     100    if (test_return_43 () != 43)
     101      abort ();
     102    if (test_return_44 () != 44)
     103      abort ();
     104    return 0;
     105  }