1 /* Register to Stack convert for GNU compiler. 2 Copyright (C) 1992-2022 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify it 7 under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 GCC is distributed in the hope that it will be useful, but WITHOUT 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 14 License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 /* This pass converts stack-like registers from the "flat register 21 file" model that gcc uses, to a stack convention that the 387 uses. 22 23 * The form of the input: 24 25 On input, the function consists of insn that have had their 26 registers fully allocated to a set of "virtual" registers. Note that 27 the word "virtual" is used differently here than elsewhere in gcc: for 28 each virtual stack reg, there is a hard reg, but the mapping between 29 them is not known until this pass is run. On output, hard register 30 numbers have been substituted, and various pop and exchange insns have 31 been emitted. The hard register numbers and the virtual register 32 numbers completely overlap - before this pass, all stack register 33 numbers are virtual, and afterward they are all hard. 34 35 The virtual registers can be manipulated normally by gcc, and their 36 semantics are the same as for normal registers. After the hard 37 register numbers are substituted, the semantics of an insn containing 38 stack-like regs are not the same as for an insn with normal regs: for 39 instance, it is not safe to delete an insn that appears to be a no-op 40 move. In general, no insn containing hard regs should be changed 41 after this pass is done. 42 43 * The form of the output: 44 45 After this pass, hard register numbers represent the distance from 46 the current top of stack to the desired register. A reference to 47 FIRST_STACK_REG references the top of stack, FIRST_STACK_REG + 1, 48 represents the register just below that, and so forth. Also, REG_DEAD 49 notes indicate whether or not a stack register should be popped. 50 51 A "swap" insn looks like a parallel of two patterns, where each 52 pattern is a SET: one sets A to B, the other B to A. 53 54 A "push" or "load" insn is a SET whose SET_DEST is FIRST_STACK_REG 55 and whose SET_DEST is REG or MEM. Any other SET_DEST, such as PLUS, 56 will replace the existing stack top, not push a new value. 57 58 A store insn is a SET whose SET_DEST is FIRST_STACK_REG, and whose 59 SET_SRC is REG or MEM. 60 61 The case where the SET_SRC and SET_DEST are both FIRST_STACK_REG 62 appears ambiguous. As a special case, the presence of a REG_DEAD note 63 for FIRST_STACK_REG differentiates between a load insn and a pop. 64 65 If a REG_DEAD is present, the insn represents a "pop" that discards 66 the top of the register stack. If there is no REG_DEAD note, then the 67 insn represents a "dup" or a push of the current top of stack onto the 68 stack. 69 70 * Methodology: 71 72 Existing REG_DEAD and REG_UNUSED notes for stack registers are 73 deleted and recreated from scratch. REG_DEAD is never created for a 74 SET_DEST, only REG_UNUSED. 75 76 * asm_operands: 77 78 There are several rules on the usage of stack-like regs in 79 asm_operands insns. These rules apply only to the operands that are 80 stack-like regs: 81 82 1. Given a set of input regs that die in an asm_operands, it is 83 necessary to know which are implicitly popped by the asm, and 84 which must be explicitly popped by gcc. 85 86 An input reg that is implicitly popped by the asm must be 87 explicitly clobbered, unless it is constrained to match an 88 output operand. 89 90 2. For any input reg that is implicitly popped by an asm, it is 91 necessary to know how to adjust the stack to compensate for the pop. 92 If any non-popped input is closer to the top of the reg-stack than 93 the implicitly popped reg, it would not be possible to know what the 94 stack looked like - it's not clear how the rest of the stack "slides 95 up". 96 97 All implicitly popped input regs must be closer to the top of 98 the reg-stack than any input that is not implicitly popped. 99 100 All explicitly referenced input operands may not "skip" a reg. 101 Otherwise we can have holes in the stack. 102 103 3. It is possible that if an input dies in an insn, reload might 104 use the input reg for an output reload. Consider this example: 105 106 asm ("foo" : "=t" (a) : "f" (b)); 107 108 This asm says that input B is not popped by the asm, and that 109 the asm pushes a result onto the reg-stack, i.e., the stack is one 110 deeper after the asm than it was before. But, it is possible that 111 reload will think that it can use the same reg for both the input and 112 the output, if input B dies in this insn. 113 114 If any input operand uses the "f" constraint, all output reg 115 constraints must use the "&" earlyclobber. 116 117 The asm above would be written as 118 119 asm ("foo" : "=&t" (a) : "f" (b)); 120 121 4. Some operands need to be in particular places on the stack. All 122 output operands fall in this category - there is no other way to 123 know which regs the outputs appear in unless the user indicates 124 this in the constraints. 125 126 Output operands must specifically indicate which reg an output 127 appears in after an asm. "=f" is not allowed: the operand 128 constraints must select a class with a single reg. 129 130 5. Output operands may not be "inserted" between existing stack regs. 131 Since no 387 opcode uses a read/write operand, all output operands 132 are dead before the asm_operands, and are pushed by the asm_operands. 133 It makes no sense to push anywhere but the top of the reg-stack. 134 135 Output operands must start at the top of the reg-stack: output 136 operands may not "skip" a reg. 137 138 6. Some asm statements may need extra stack space for internal 139 calculations. This can be guaranteed by clobbering stack registers 140 unrelated to the inputs and outputs. 141 142 Here are a couple of reasonable asms to want to write. This asm 143 takes one input, which is internally popped, and produces two outputs. 144 145 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 146 147 This asm takes two inputs, which are popped by the fyl2xp1 opcode, 148 and replaces them with one output. The user must code the "st(1)" 149 clobber for reg-stack.cc to know that fyl2xp1 pops both inputs. 150 151 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 152 153 */ 154 155 #include "config.h" 157 #include "system.h" 158 #include "coretypes.h" 159 #include "backend.h" 160 #include "target.h" 161 #include "rtl.h" 162 #include "tree.h" 163 #include "df.h" 164 #include "insn-config.h" 165 #include "memmodel.h" 166 #include "regs.h" 167 #include "emit-rtl.h" /* FIXME: Can go away once crtl is moved to rtl.h. */ 168 #include "recog.h" 169 #include "varasm.h" 170 #include "rtl-error.h" 171 #include "cfgrtl.h" 172 #include "cfganal.h" 173 #include "cfgbuild.h" 174 #include "cfgcleanup.h" 175 #include "reload.h" 176 #include "tree-pass.h" 177 #include "rtl-iter.h" 178 #include "function-abi.h" 179 180 #ifdef STACK_REGS 181 182 /* We use this array to cache info about insns, because otherwise we 183 spend too much time in stack_regs_mentioned_p. 184 185 Indexed by insn UIDs. A value of zero is uninitialized, one indicates 186 the insn uses stack registers, two indicates the insn does not use 187 stack registers. */ 188 static vec<char> stack_regs_mentioned_data; 189 190 #define REG_STACK_SIZE (LAST_STACK_REG - FIRST_STACK_REG + 1) 191 192 int regstack_completed = 0; 193 194 /* This is the basic stack record. TOP is an index into REG[] such 195 that REG[TOP] is the top of stack. If TOP is -1 the stack is empty. 196 197 If TOP is -2, REG[] is not yet initialized. Stack initialization 198 consists of placing each live reg in array `reg' and setting `top' 199 appropriately. 200 201 REG_SET indicates which registers are live. */ 202 203 typedef struct stack_def 204 { 205 int top; /* index to top stack element */ 206 HARD_REG_SET reg_set; /* set of live registers */ 207 unsigned char reg[REG_STACK_SIZE];/* register - stack mapping */ 208 } *stack_ptr; 209 210 /* This is used to carry information about basic blocks. It is 211 attached to the AUX field of the standard CFG block. */ 212 213 typedef struct block_info_def 214 { 215 struct stack_def stack_in; /* Input stack configuration. */ 216 struct stack_def stack_out; /* Output stack configuration. */ 217 HARD_REG_SET out_reg_set; /* Stack regs live on output. */ 218 int done; /* True if block already converted. */ 219 int predecessors; /* Number of predecessors that need 220 to be visited. */ 221 } *block_info; 222 223 #define BLOCK_INFO(B) ((block_info) (B)->aux) 224 225 /* Passed to change_stack to indicate where to emit insns. */ 226 enum emit_where 227 { 228 EMIT_AFTER, 229 EMIT_BEFORE 230 }; 231 232 /* The block we're currently working on. */ 233 static basic_block current_block; 234 235 /* In the current_block, whether we're processing the first register 236 stack or call instruction, i.e. the regstack is currently the 237 same as BLOCK_INFO(current_block)->stack_in. */ 238 static bool starting_stack_p; 239 240 /* This is the register file for all register after conversion. */ 241 static rtx 242 FP_mode_reg[LAST_STACK_REG+1-FIRST_STACK_REG][(int) MAX_MACHINE_MODE]; 243 244 #define FP_MODE_REG(regno,mode) \ 245 (FP_mode_reg[(regno)-FIRST_STACK_REG][(int) (mode)]) 246 247 /* Used to initialize uninitialized registers. */ 248 static rtx not_a_num; 249 250 /* Forward declarations */ 251 252 static int stack_regs_mentioned_p (const_rtx pat); 253 static void pop_stack (stack_ptr, int); 254 static rtx *get_true_reg (rtx *); 255 256 static int check_asm_stack_operands (rtx_insn *); 257 static void get_asm_operands_in_out (rtx, int *, int *); 258 static rtx stack_result (tree); 259 static void replace_reg (rtx *, int); 260 static void remove_regno_note (rtx_insn *, enum reg_note, unsigned int); 261 static int get_hard_regnum (stack_ptr, rtx); 262 static rtx_insn *emit_pop_insn (rtx_insn *, stack_ptr, rtx, enum emit_where); 263 static void swap_to_top (rtx_insn *, stack_ptr, rtx, rtx); 264 static bool move_for_stack_reg (rtx_insn *, stack_ptr, rtx); 265 static bool move_nan_for_stack_reg (rtx_insn *, stack_ptr, rtx); 266 static int swap_rtx_condition_1 (rtx); 267 static int swap_rtx_condition (rtx_insn *, int &); 268 static void compare_for_stack_reg (rtx_insn *, stack_ptr, rtx, bool); 269 static bool subst_stack_regs_pat (rtx_insn *, stack_ptr, rtx); 270 static void subst_asm_stack_regs (rtx_insn *, stack_ptr); 271 static bool subst_stack_regs (rtx_insn *, stack_ptr); 272 static void change_stack (rtx_insn *, stack_ptr, stack_ptr, enum emit_where); 273 static void print_stack (FILE *, stack_ptr); 274 static rtx_insn *next_flags_user (rtx_insn *, int &); 275 276 /* Return nonzero if any stack register is mentioned somewhere within PAT. */ 278 279 static int 280 stack_regs_mentioned_p (const_rtx pat) 281 { 282 const char *fmt; 283 int i; 284 285 if (STACK_REG_P (pat)) 286 return 1; 287 288 fmt = GET_RTX_FORMAT (GET_CODE (pat)); 289 for (i = GET_RTX_LENGTH (GET_CODE (pat)) - 1; i >= 0; i--) 290 { 291 if (fmt[i] == 'E') 292 { 293 int j; 294 295 for (j = XVECLEN (pat, i) - 1; j >= 0; j--) 296 if (stack_regs_mentioned_p (XVECEXP (pat, i, j))) 297 return 1; 298 } 299 else if (fmt[i] == 'e' && stack_regs_mentioned_p (XEXP (pat, i))) 300 return 1; 301 } 302 303 return 0; 304 } 305 306 /* Return nonzero if INSN mentions stacked registers, else return zero. */ 307 308 int 309 stack_regs_mentioned (const_rtx insn) 310 { 311 unsigned int uid, max; 312 int test; 313 314 if (! INSN_P (insn) || !stack_regs_mentioned_data.exists ()) 315 return 0; 316 317 uid = INSN_UID (insn); 318 max = stack_regs_mentioned_data.length (); 319 if (uid >= max) 320 { 321 /* Allocate some extra size to avoid too many reallocs, but 322 do not grow too quickly. */ 323 max = uid + uid / 20 + 1; 324 stack_regs_mentioned_data.safe_grow_cleared (max, true); 325 } 326 327 test = stack_regs_mentioned_data[uid]; 328 if (test == 0) 329 { 330 /* This insn has yet to be examined. Do so now. */ 331 test = stack_regs_mentioned_p (PATTERN (insn)) ? 1 : 2; 332 stack_regs_mentioned_data[uid] = test; 333 } 334 335 return test == 1; 336 } 337 338 static rtx ix86_flags_rtx; 340 341 static rtx_insn * 342 next_flags_user (rtx_insn *insn, int &debug_seen) 343 { 344 /* Search forward looking for the first use of this value. 345 Stop at block boundaries. */ 346 347 while (insn != BB_END (current_block)) 348 { 349 insn = NEXT_INSN (insn); 350 351 if (INSN_P (insn) && reg_mentioned_p (ix86_flags_rtx, PATTERN (insn))) 352 { 353 if (DEBUG_INSN_P (insn) && debug_seen >= 0) 354 { 355 debug_seen = 1; 356 continue; 357 } 358 return insn; 359 } 360 361 if (CALL_P (insn)) 362 return NULL; 363 } 364 return NULL; 365 } 366 367 /* Reorganize the stack into ascending numbers, before this insn. */ 369 370 static void 371 straighten_stack (rtx_insn *insn, stack_ptr regstack) 372 { 373 struct stack_def temp_stack; 374 int top; 375 376 /* If there is only a single register on the stack, then the stack is 377 already in increasing order and no reorganization is needed. 378 379 Similarly if the stack is empty. */ 380 if (regstack->top <= 0) 381 return; 382 383 temp_stack.reg_set = regstack->reg_set; 384 385 for (top = temp_stack.top = regstack->top; top >= 0; top--) 386 temp_stack.reg[top] = FIRST_STACK_REG + temp_stack.top - top; 387 388 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); 389 } 390 391 /* Pop a register from the stack. */ 392 393 static void 394 pop_stack (stack_ptr regstack, int regno) 395 { 396 int top = regstack->top; 397 398 CLEAR_HARD_REG_BIT (regstack->reg_set, regno); 399 regstack->top--; 400 /* If regno was not at the top of stack then adjust stack. */ 401 if (regstack->reg [top] != regno) 402 { 403 int i; 404 for (i = regstack->top; i >= 0; i--) 405 if (regstack->reg [i] == regno) 406 { 407 int j; 408 for (j = i; j < top; j++) 409 regstack->reg [j] = regstack->reg [j + 1]; 410 break; 411 } 412 } 413 } 414 415 /* Return a pointer to the REG expression within PAT. If PAT is not a 417 REG, possible enclosed by a conversion rtx, return the inner part of 418 PAT that stopped the search. */ 419 420 static rtx * 421 get_true_reg (rtx *pat) 422 { 423 for (;;) 424 switch (GET_CODE (*pat)) 425 { 426 case SUBREG: 427 /* Eliminate FP subregister accesses in favor of the 428 actual FP register in use. */ 429 { 430 rtx subreg = SUBREG_REG (*pat); 431 432 if (STACK_REG_P (subreg)) 433 { 434 int regno_off = subreg_regno_offset (REGNO (subreg), 435 GET_MODE (subreg), 436 SUBREG_BYTE (*pat), 437 GET_MODE (*pat)); 438 *pat = FP_MODE_REG (REGNO (subreg) + regno_off, 439 GET_MODE (subreg)); 440 return pat; 441 } 442 pat = &XEXP (*pat, 0); 443 break; 444 } 445 446 case FLOAT_TRUNCATE: 447 if (!flag_unsafe_math_optimizations) 448 return pat; 449 /* FALLTHRU */ 450 451 case FLOAT: 452 case FIX: 453 case FLOAT_EXTEND: 454 pat = &XEXP (*pat, 0); 455 break; 456 457 case UNSPEC: 458 if (XINT (*pat, 1) == UNSPEC_TRUNC_NOOP 459 || XINT (*pat, 1) == UNSPEC_FILD_ATOMIC) 460 pat = &XVECEXP (*pat, 0, 0); 461 return pat; 462 463 default: 464 return pat; 465 } 466 } 467 468 /* Set if we find any malformed asms in a function. */ 470 static bool any_malformed_asm; 471 472 /* There are many rules that an asm statement for stack-like regs must 473 follow. Those rules are explained at the top of this file: the rule 474 numbers below refer to that explanation. */ 475 476 static int 477 check_asm_stack_operands (rtx_insn *insn) 478 { 479 int i; 480 int n_clobbers; 481 int malformed_asm = 0; 482 rtx body = PATTERN (insn); 483 484 char reg_used_as_output[FIRST_PSEUDO_REGISTER]; 485 char implicitly_dies[FIRST_PSEUDO_REGISTER]; 486 char explicitly_used[FIRST_PSEUDO_REGISTER]; 487 488 rtx *clobber_reg = 0; 489 int n_inputs, n_outputs; 490 491 /* Find out what the constraints require. If no constraint 492 alternative matches, this asm is malformed. */ 493 extract_constrain_insn (insn); 494 495 preprocess_constraints (insn); 496 497 get_asm_operands_in_out (body, &n_outputs, &n_inputs); 498 499 if (which_alternative < 0) 500 { 501 /* Avoid further trouble with this insn. */ 502 PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx); 503 return 0; 504 } 505 const operand_alternative *op_alt = which_op_alt (); 506 507 /* Strip SUBREGs here to make the following code simpler. */ 508 for (i = 0; i < recog_data.n_operands; i++) 509 if (GET_CODE (recog_data.operand[i]) == SUBREG 510 && REG_P (SUBREG_REG (recog_data.operand[i]))) 511 recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]); 512 513 /* Set up CLOBBER_REG. */ 514 515 n_clobbers = 0; 516 517 if (GET_CODE (body) == PARALLEL) 518 { 519 clobber_reg = XALLOCAVEC (rtx, XVECLEN (body, 0)); 520 521 for (i = 0; i < XVECLEN (body, 0); i++) 522 if (GET_CODE (XVECEXP (body, 0, i)) == CLOBBER) 523 { 524 rtx clobber = XVECEXP (body, 0, i); 525 rtx reg = XEXP (clobber, 0); 526 527 if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg))) 528 reg = SUBREG_REG (reg); 529 530 if (STACK_REG_P (reg)) 531 { 532 clobber_reg[n_clobbers] = reg; 533 n_clobbers++; 534 } 535 } 536 } 537 538 /* Enforce rule #4: Output operands must specifically indicate which 539 reg an output appears in after an asm. "=f" is not allowed: the 540 operand constraints must select a class with a single reg. 541 542 Also enforce rule #5: Output operands must start at the top of 543 the reg-stack: output operands may not "skip" a reg. */ 544 545 memset (reg_used_as_output, 0, sizeof (reg_used_as_output)); 546 for (i = 0; i < n_outputs; i++) 547 if (STACK_REG_P (recog_data.operand[i])) 548 { 549 if (reg_class_size[(int) op_alt[i].cl] != 1) 550 { 551 error_for_asm (insn, "output constraint %d must specify a single register", i); 552 malformed_asm = 1; 553 } 554 else 555 { 556 int j; 557 558 for (j = 0; j < n_clobbers; j++) 559 if (REGNO (recog_data.operand[i]) == REGNO (clobber_reg[j])) 560 { 561 error_for_asm (insn, "output constraint %d cannot be " 562 "specified together with %qs clobber", 563 i, reg_names [REGNO (clobber_reg[j])]); 564 malformed_asm = 1; 565 break; 566 } 567 if (j == n_clobbers) 568 reg_used_as_output[REGNO (recog_data.operand[i])] = 1; 569 } 570 } 571 572 573 /* Search for first non-popped reg. */ 574 for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++) 575 if (! reg_used_as_output[i]) 576 break; 577 578 /* If there are any other popped regs, that's an error. */ 579 for (; i < LAST_STACK_REG + 1; i++) 580 if (reg_used_as_output[i]) 581 break; 582 583 if (i != LAST_STACK_REG + 1) 584 { 585 error_for_asm (insn, "output registers must be grouped at top of stack"); 586 malformed_asm = 1; 587 } 588 589 /* Enforce rule #2: All implicitly popped input regs must be closer 590 to the top of the reg-stack than any input that is not implicitly 591 popped. */ 592 593 memset (implicitly_dies, 0, sizeof (implicitly_dies)); 594 memset (explicitly_used, 0, sizeof (explicitly_used)); 595 for (i = n_outputs; i < n_outputs + n_inputs; i++) 596 if (STACK_REG_P (recog_data.operand[i])) 597 { 598 /* An input reg is implicitly popped if it is tied to an 599 output, or if there is a CLOBBER for it. */ 600 int j; 601 602 for (j = 0; j < n_clobbers; j++) 603 if (operands_match_p (clobber_reg[j], recog_data.operand[i])) 604 break; 605 606 if (j < n_clobbers || op_alt[i].matches >= 0) 607 implicitly_dies[REGNO (recog_data.operand[i])] = 1; 608 else if (reg_class_size[(int) op_alt[i].cl] == 1) 609 explicitly_used[REGNO (recog_data.operand[i])] = 1; 610 } 611 612 /* Search for first non-popped reg. */ 613 for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++) 614 if (! implicitly_dies[i]) 615 break; 616 617 /* If there are any other popped regs, that's an error. */ 618 for (; i < LAST_STACK_REG + 1; i++) 619 if (implicitly_dies[i]) 620 break; 621 622 if (i != LAST_STACK_REG + 1) 623 { 624 error_for_asm (insn, 625 "implicitly popped registers must be grouped " 626 "at top of stack"); 627 malformed_asm = 1; 628 } 629 630 /* Search for first not-explicitly used reg. */ 631 for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++) 632 if (! implicitly_dies[i] && ! explicitly_used[i]) 633 break; 634 635 /* If there are any other explicitly used regs, that's an error. */ 636 for (; i < LAST_STACK_REG + 1; i++) 637 if (explicitly_used[i]) 638 break; 639 640 if (i != LAST_STACK_REG + 1) 641 { 642 error_for_asm (insn, 643 "explicitly used registers must be grouped " 644 "at top of stack"); 645 malformed_asm = 1; 646 } 647 648 /* Enforce rule #3: If any input operand uses the "f" constraint, all 649 output constraints must use the "&" earlyclobber. 650 651 ??? Detect this more deterministically by having constrain_asm_operands 652 record any earlyclobber. */ 653 654 for (i = n_outputs; i < n_outputs + n_inputs; i++) 655 if (STACK_REG_P (recog_data.operand[i]) && op_alt[i].matches == -1) 656 { 657 int j; 658 659 for (j = 0; j < n_outputs; j++) 660 if (operands_match_p (recog_data.operand[j], recog_data.operand[i])) 661 { 662 error_for_asm (insn, 663 "output operand %d must use %<&%> constraint", j); 664 malformed_asm = 1; 665 } 666 } 667 668 if (malformed_asm) 669 { 670 /* Avoid further trouble with this insn. */ 671 PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx); 672 any_malformed_asm = true; 673 return 0; 674 } 675 676 return 1; 677 } 678 679 /* Calculate the number of inputs and outputs in BODY, an 681 asm_operands. N_OPERANDS is the total number of operands, and 682 N_INPUTS and N_OUTPUTS are pointers to ints into which the results are 683 placed. */ 684 685 static void 686 get_asm_operands_in_out (rtx body, int *pout, int *pin) 687 { 688 rtx asmop = extract_asm_operands (body); 689 690 *pin = ASM_OPERANDS_INPUT_LENGTH (asmop); 691 *pout = (recog_data.n_operands 692 - ASM_OPERANDS_INPUT_LENGTH (asmop) 693 - ASM_OPERANDS_LABEL_LENGTH (asmop)); 694 } 695 696 /* If current function returns its result in an fp stack register, 697 return the REG. Otherwise, return 0. */ 698 699 static rtx 700 stack_result (tree decl) 701 { 702 rtx result; 703 704 /* If the value is supposed to be returned in memory, then clearly 705 it is not returned in a stack register. */ 706 if (aggregate_value_p (DECL_RESULT (decl), decl)) 707 return 0; 708 709 result = DECL_RTL_IF_SET (DECL_RESULT (decl)); 710 if (result != 0) 711 result = targetm.calls.function_value (TREE_TYPE (DECL_RESULT (decl)), 712 decl, true); 713 714 return result != 0 && STACK_REG_P (result) ? result : 0; 715 } 716 717 719 /* 720 * This section deals with stack register substitution, and forms the second 721 * pass over the RTL. 722 */ 723 724 /* Replace REG, which is a pointer to a stack reg RTX, with an RTX for 725 the desired hard REGNO. */ 726 727 static void 728 replace_reg (rtx *reg, int regno) 729 { 730 gcc_assert (IN_RANGE (regno, FIRST_STACK_REG, LAST_STACK_REG)); 731 gcc_assert (STACK_REG_P (*reg)); 732 733 gcc_assert (GET_MODE_CLASS (GET_MODE (*reg)) == MODE_FLOAT 734 || GET_MODE_CLASS (GET_MODE (*reg)) == MODE_COMPLEX_FLOAT); 735 736 *reg = FP_MODE_REG (regno, GET_MODE (*reg)); 737 } 738 739 /* Remove a note of type NOTE, which must be found, for register 740 number REGNO from INSN. Remove only one such note. */ 741 742 static void 743 remove_regno_note (rtx_insn *insn, enum reg_note note, unsigned int regno) 744 { 745 rtx *note_link, this_rtx; 746 747 note_link = ®_NOTES (insn); 748 for (this_rtx = *note_link; this_rtx; this_rtx = XEXP (this_rtx, 1)) 749 if (REG_NOTE_KIND (this_rtx) == note 750 && REG_P (XEXP (this_rtx, 0)) && REGNO (XEXP (this_rtx, 0)) == regno) 751 { 752 *note_link = XEXP (this_rtx, 1); 753 return; 754 } 755 else 756 note_link = &XEXP (this_rtx, 1); 757 758 gcc_unreachable (); 759 } 760 761 /* Find the hard register number of virtual register REG in REGSTACK. 762 The hard register number is relative to the top of the stack. -1 is 763 returned if the register is not found. */ 764 765 static int 766 get_hard_regnum (stack_ptr regstack, rtx reg) 767 { 768 int i; 769 770 gcc_assert (STACK_REG_P (reg)); 771 772 for (i = regstack->top; i >= 0; i--) 773 if (regstack->reg[i] == REGNO (reg)) 774 break; 775 776 return i >= 0 ? (FIRST_STACK_REG + regstack->top - i) : -1; 777 } 778 779 /* Emit an insn to pop virtual register REG before or after INSN. 781 REGSTACK is the stack state after INSN and is updated to reflect this 782 pop. WHEN is either emit_insn_before or emit_insn_after. A pop insn 783 is represented as a SET whose destination is the register to be popped 784 and source is the top of stack. A death note for the top of stack 785 cases the movdf pattern to pop. */ 786 787 static rtx_insn * 788 emit_pop_insn (rtx_insn *insn, stack_ptr regstack, rtx reg, 789 enum emit_where where) 790 { 791 machine_mode raw_mode = reg_raw_mode[FIRST_STACK_REG]; 792 rtx_insn *pop_insn; 793 rtx pop_rtx; 794 int hard_regno; 795 796 /* For complex types take care to pop both halves. These may survive in 797 CLOBBER and USE expressions. */ 798 if (COMPLEX_MODE_P (GET_MODE (reg))) 799 { 800 rtx reg1 = FP_MODE_REG (REGNO (reg), raw_mode); 801 rtx reg2 = FP_MODE_REG (REGNO (reg) + 1, raw_mode); 802 803 pop_insn = NULL; 804 if (get_hard_regnum (regstack, reg1) >= 0) 805 pop_insn = emit_pop_insn (insn, regstack, reg1, where); 806 if (get_hard_regnum (regstack, reg2) >= 0) 807 pop_insn = emit_pop_insn (insn, regstack, reg2, where); 808 gcc_assert (pop_insn); 809 return pop_insn; 810 } 811 812 hard_regno = get_hard_regnum (regstack, reg); 813 814 gcc_assert (hard_regno >= FIRST_STACK_REG); 815 816 pop_rtx = gen_rtx_SET (FP_MODE_REG (hard_regno, raw_mode), 817 FP_MODE_REG (FIRST_STACK_REG, raw_mode)); 818 819 if (where == EMIT_AFTER) 820 pop_insn = emit_insn_after (pop_rtx, insn); 821 else 822 pop_insn = emit_insn_before (pop_rtx, insn); 823 824 add_reg_note (pop_insn, REG_DEAD, FP_MODE_REG (FIRST_STACK_REG, raw_mode)); 825 826 regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)] 827 = regstack->reg[regstack->top]; 828 regstack->top -= 1; 829 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (reg)); 830 831 return pop_insn; 832 } 833 834 /* Emit an insn before or after INSN to swap virtual register REG with 836 the top of stack. REGSTACK is the stack state before the swap, and 837 is updated to reflect the swap. A swap insn is represented as a 838 PARALLEL of two patterns: each pattern moves one reg to the other. 839 840 If REG is already at the top of the stack, no insn is emitted. */ 841 842 static void 843 emit_swap_insn (rtx_insn *insn, stack_ptr regstack, rtx reg) 844 { 845 int hard_regno; 846 int other_reg; /* swap regno temps */ 847 rtx_insn *i1; /* the stack-reg insn prior to INSN */ 848 rtx i1set = NULL_RTX; /* the SET rtx within I1 */ 849 850 hard_regno = get_hard_regnum (regstack, reg); 851 852 if (hard_regno == FIRST_STACK_REG) 853 return; 854 if (hard_regno == -1) 855 { 856 /* Something failed if the register wasn't on the stack. If we had 857 malformed asms, we zapped the instruction itself, but that didn't 858 produce the same pattern of register sets as before. To prevent 859 further failure, adjust REGSTACK to include REG at TOP. */ 860 gcc_assert (any_malformed_asm); 861 regstack->reg[++regstack->top] = REGNO (reg); 862 return; 863 } 864 gcc_assert (hard_regno >= FIRST_STACK_REG); 865 866 other_reg = regstack->top - (hard_regno - FIRST_STACK_REG); 867 std::swap (regstack->reg[regstack->top], regstack->reg[other_reg]); 868 869 /* Find the previous insn involving stack regs, but don't pass a 870 block boundary. */ 871 i1 = NULL; 872 if (current_block && insn != BB_HEAD (current_block)) 873 { 874 rtx_insn *tmp = PREV_INSN (insn); 875 rtx_insn *limit = PREV_INSN (BB_HEAD (current_block)); 876 while (tmp != limit) 877 { 878 if (LABEL_P (tmp) 879 || CALL_P (tmp) 880 || NOTE_INSN_BASIC_BLOCK_P (tmp) 881 || (NONJUMP_INSN_P (tmp) 882 && stack_regs_mentioned (tmp))) 883 { 884 i1 = tmp; 885 break; 886 } 887 tmp = PREV_INSN (tmp); 888 } 889 } 890 891 if (i1 != NULL_RTX 892 && (i1set = single_set (i1)) != NULL_RTX) 893 { 894 rtx i1src = *get_true_reg (&SET_SRC (i1set)); 895 rtx i1dest = *get_true_reg (&SET_DEST (i1set)); 896 897 /* If the previous register stack push was from the reg we are to 898 swap with, omit the swap. */ 899 900 if (REG_P (i1dest) && REGNO (i1dest) == FIRST_STACK_REG 901 && REG_P (i1src) 902 && REGNO (i1src) == (unsigned) hard_regno - 1 903 && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX) 904 return; 905 906 /* If the previous insn wrote to the reg we are to swap with, 907 omit the swap. */ 908 909 if (REG_P (i1dest) && REGNO (i1dest) == (unsigned) hard_regno 910 && REG_P (i1src) && REGNO (i1src) == FIRST_STACK_REG 911 && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX) 912 return; 913 914 /* Instead of 915 fld a 916 fld b 917 fxch %st(1) 918 just use 919 fld b 920 fld a 921 if possible. Similarly for fld1, fldz, fldpi etc. instead of any 922 of the loads or for float extension from memory. */ 923 924 i1src = SET_SRC (i1set); 925 if (GET_CODE (i1src) == FLOAT_EXTEND) 926 i1src = XEXP (i1src, 0); 927 if (REG_P (i1dest) 928 && REGNO (i1dest) == FIRST_STACK_REG 929 && (MEM_P (i1src) || GET_CODE (i1src) == CONST_DOUBLE) 930 && !side_effects_p (i1src) 931 && hard_regno == FIRST_STACK_REG + 1 932 && i1 != BB_HEAD (current_block)) 933 { 934 /* i1 is the last insn that involves stack regs before insn, and 935 is known to be a load without other side-effects, i.e. fld b 936 in the above comment. */ 937 rtx_insn *i2 = NULL; 938 rtx i2set; 939 rtx_insn *tmp = PREV_INSN (i1); 940 rtx_insn *limit = PREV_INSN (BB_HEAD (current_block)); 941 /* Find the previous insn involving stack regs, but don't pass a 942 block boundary. */ 943 while (tmp != limit) 944 { 945 if (LABEL_P (tmp) 946 || CALL_P (tmp) 947 || NOTE_INSN_BASIC_BLOCK_P (tmp) 948 || (NONJUMP_INSN_P (tmp) 949 && stack_regs_mentioned (tmp))) 950 { 951 i2 = tmp; 952 break; 953 } 954 tmp = PREV_INSN (tmp); 955 } 956 if (i2 != NULL_RTX 957 && (i2set = single_set (i2)) != NULL_RTX) 958 { 959 rtx i2dest = *get_true_reg (&SET_DEST (i2set)); 960 rtx i2src = SET_SRC (i2set); 961 if (GET_CODE (i2src) == FLOAT_EXTEND) 962 i2src = XEXP (i2src, 0); 963 /* If the last two insns before insn that involve 964 stack regs are loads, where the latter (i1) 965 pushes onto the register stack and thus 966 moves the value from the first load (i2) from 967 %st to %st(1), consider swapping them. */ 968 if (REG_P (i2dest) 969 && REGNO (i2dest) == FIRST_STACK_REG 970 && (MEM_P (i2src) || GET_CODE (i2src) == CONST_DOUBLE) 971 /* Ensure i2 doesn't have other side-effects. */ 972 && !side_effects_p (i2src) 973 /* And that the two instructions can actually be 974 swapped, i.e. there shouldn't be any stores 975 in between i2 and i1 that might alias with 976 the i1 memory, and the memory address can't 977 use registers set in between i2 and i1. */ 978 && !modified_between_p (SET_SRC (i1set), i2, i1)) 979 { 980 /* Move i1 (fld b above) right before i2 (fld a 981 above. */ 982 remove_insn (i1); 983 SET_PREV_INSN (i1) = NULL_RTX; 984 SET_NEXT_INSN (i1) = NULL_RTX; 985 set_block_for_insn (i1, NULL); 986 emit_insn_before (i1, i2); 987 return; 988 } 989 } 990 } 991 } 992 993 /* Avoid emitting the swap if this is the first register stack insn 994 of the current_block. Instead update the current_block's stack_in 995 and let compensate edges take care of this for us. */ 996 if (current_block && starting_stack_p) 997 { 998 BLOCK_INFO (current_block)->stack_in = *regstack; 999 starting_stack_p = false; 1000 return; 1001 } 1002 1003 machine_mode raw_mode = reg_raw_mode[FIRST_STACK_REG]; 1004 rtx op1 = FP_MODE_REG (hard_regno, raw_mode); 1005 rtx op2 = FP_MODE_REG (FIRST_STACK_REG, raw_mode); 1006 rtx swap_rtx 1007 = gen_rtx_PARALLEL (VOIDmode, 1008 gen_rtvec (2, gen_rtx_SET (op1, op2), 1009 gen_rtx_SET (op2, op1))); 1010 if (i1) 1011 emit_insn_after (swap_rtx, i1); 1012 else if (current_block) 1013 emit_insn_before (swap_rtx, BB_HEAD (current_block)); 1014 else 1015 emit_insn_before (swap_rtx, insn); 1016 } 1017 1018 /* Emit an insns before INSN to swap virtual register SRC1 with 1020 the top of stack and virtual register SRC2 with second stack 1021 slot. REGSTACK is the stack state before the swaps, and 1022 is updated to reflect the swaps. A swap insn is represented as a 1023 PARALLEL of two patterns: each pattern moves one reg to the other. 1024 1025 If SRC1 and/or SRC2 are already at the right place, no swap insn 1026 is emitted. */ 1027 1028 static void 1029 swap_to_top (rtx_insn *insn, stack_ptr regstack, rtx src1, rtx src2) 1030 { 1031 struct stack_def temp_stack; 1032 int regno, j, k; 1033 1034 temp_stack = *regstack; 1035 1036 /* Place operand 1 at the top of stack. */ 1037 regno = get_hard_regnum (&temp_stack, src1); 1038 gcc_assert (regno >= 0); 1039 if (regno != FIRST_STACK_REG) 1040 { 1041 k = temp_stack.top - (regno - FIRST_STACK_REG); 1042 j = temp_stack.top; 1043 1044 std::swap (temp_stack.reg[j], temp_stack.reg[k]); 1045 } 1046 1047 /* Place operand 2 next on the stack. */ 1048 regno = get_hard_regnum (&temp_stack, src2); 1049 gcc_assert (regno >= 0); 1050 if (regno != FIRST_STACK_REG + 1) 1051 { 1052 k = temp_stack.top - (regno - FIRST_STACK_REG); 1053 j = temp_stack.top - 1; 1054 1055 std::swap (temp_stack.reg[j], temp_stack.reg[k]); 1056 } 1057 1058 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); 1059 } 1060 1061 /* Handle a move to or from a stack register in PAT, which is in INSN. 1063 REGSTACK is the current stack. Return whether a control flow insn 1064 was deleted in the process. */ 1065 1066 static bool 1067 move_for_stack_reg (rtx_insn *insn, stack_ptr regstack, rtx pat) 1068 { 1069 rtx *psrc = get_true_reg (&SET_SRC (pat)); 1070 rtx *pdest = get_true_reg (&SET_DEST (pat)); 1071 rtx src, dest; 1072 rtx note; 1073 bool control_flow_insn_deleted = false; 1074 1075 src = *psrc; dest = *pdest; 1076 1077 if (STACK_REG_P (src) && STACK_REG_P (dest)) 1078 { 1079 /* Write from one stack reg to another. If SRC dies here, then 1080 just change the register mapping and delete the insn. */ 1081 1082 note = find_regno_note (insn, REG_DEAD, REGNO (src)); 1083 if (note) 1084 { 1085 int i; 1086 1087 /* If this is a no-op move, there must not be a REG_DEAD note. */ 1088 gcc_assert (REGNO (src) != REGNO (dest)); 1089 1090 for (i = regstack->top; i >= 0; i--) 1091 if (regstack->reg[i] == REGNO (src)) 1092 break; 1093 1094 /* The destination must be dead, or life analysis is borked. */ 1095 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG); 1096 1097 /* If the source is not live, this is yet another case of 1098 uninitialized variables. Load up a NaN instead. */ 1099 if (i < 0) 1100 return move_nan_for_stack_reg (insn, regstack, dest); 1101 1102 /* It is possible that the dest is unused after this insn. 1103 If so, just pop the src. */ 1104 1105 if (find_regno_note (insn, REG_UNUSED, REGNO (dest))) 1106 emit_pop_insn (insn, regstack, src, EMIT_AFTER); 1107 else 1108 { 1109 regstack->reg[i] = REGNO (dest); 1110 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); 1111 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); 1112 } 1113 1114 control_flow_insn_deleted |= control_flow_insn_p (insn); 1115 delete_insn (insn); 1116 return control_flow_insn_deleted; 1117 } 1118 1119 /* The source reg does not die. */ 1120 1121 /* If this appears to be a no-op move, delete it, or else it 1122 will confuse the machine description output patterns. But if 1123 it is REG_UNUSED, we must pop the reg now, as per-insn processing 1124 for REG_UNUSED will not work for deleted insns. */ 1125 1126 if (REGNO (src) == REGNO (dest)) 1127 { 1128 if (find_regno_note (insn, REG_UNUSED, REGNO (dest))) 1129 emit_pop_insn (insn, regstack, dest, EMIT_AFTER); 1130 1131 control_flow_insn_deleted |= control_flow_insn_p (insn); 1132 delete_insn (insn); 1133 return control_flow_insn_deleted; 1134 } 1135 1136 /* The destination ought to be dead. */ 1137 if (get_hard_regnum (regstack, dest) >= FIRST_STACK_REG) 1138 gcc_assert (any_malformed_asm); 1139 else 1140 { 1141 replace_reg (psrc, get_hard_regnum (regstack, src)); 1142 1143 regstack->reg[++regstack->top] = REGNO (dest); 1144 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); 1145 replace_reg (pdest, FIRST_STACK_REG); 1146 } 1147 } 1148 else if (STACK_REG_P (src)) 1149 { 1150 /* Save from a stack reg to MEM, or possibly integer reg. Since 1151 only top of stack may be saved, emit an exchange first if 1152 needs be. */ 1153 1154 emit_swap_insn (insn, regstack, src); 1155 1156 note = find_regno_note (insn, REG_DEAD, REGNO (src)); 1157 if (note) 1158 { 1159 replace_reg (&XEXP (note, 0), FIRST_STACK_REG); 1160 regstack->top--; 1161 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); 1162 } 1163 else if ((GET_MODE (src) == XFmode) 1164 && regstack->top < REG_STACK_SIZE - 1) 1165 { 1166 /* A 387 cannot write an XFmode value to a MEM without 1167 clobbering the source reg. The output code can handle 1168 this by reading back the value from the MEM. 1169 But it is more efficient to use a temp register if one is 1170 available. Push the source value here if the register 1171 stack is not full, and then write the value to memory via 1172 a pop. */ 1173 rtx push_rtx; 1174 rtx top_stack_reg = FP_MODE_REG (FIRST_STACK_REG, GET_MODE (src)); 1175 1176 push_rtx = gen_movxf (top_stack_reg, top_stack_reg); 1177 emit_insn_before (push_rtx, insn); 1178 add_reg_note (insn, REG_DEAD, top_stack_reg); 1179 } 1180 1181 replace_reg (psrc, FIRST_STACK_REG); 1182 } 1183 else 1184 { 1185 rtx pat = PATTERN (insn); 1186 1187 gcc_assert (STACK_REG_P (dest)); 1188 1189 /* Load from MEM, or possibly integer REG or constant, into the 1190 stack regs. The actual target is always the top of the 1191 stack. The stack mapping is changed to reflect that DEST is 1192 now at top of stack. */ 1193 1194 /* The destination ought to be dead. However, there is a 1195 special case with i387 UNSPEC_TAN, where destination is live 1196 (an argument to fptan) but inherent load of 1.0 is modelled 1197 as a load from a constant. */ 1198 if (GET_CODE (pat) == PARALLEL 1199 && XVECLEN (pat, 0) == 2 1200 && GET_CODE (XVECEXP (pat, 0, 1)) == SET 1201 && GET_CODE (SET_SRC (XVECEXP (pat, 0, 1))) == UNSPEC 1202 && XINT (SET_SRC (XVECEXP (pat, 0, 1)), 1) == UNSPEC_TAN) 1203 emit_swap_insn (insn, regstack, dest); 1204 else 1205 gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG 1206 || any_malformed_asm); 1207 1208 gcc_assert (regstack->top < REG_STACK_SIZE); 1209 1210 regstack->reg[++regstack->top] = REGNO (dest); 1211 SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); 1212 replace_reg (pdest, FIRST_STACK_REG); 1213 } 1214 1215 return control_flow_insn_deleted; 1216 } 1217 1218 /* A helper function which replaces INSN with a pattern that loads up 1219 a NaN into DEST, then invokes move_for_stack_reg. */ 1220 1221 static bool 1222 move_nan_for_stack_reg (rtx_insn *insn, stack_ptr regstack, rtx dest) 1223 { 1224 rtx pat; 1225 1226 dest = FP_MODE_REG (REGNO (dest), SFmode); 1227 pat = gen_rtx_SET (dest, not_a_num); 1228 PATTERN (insn) = pat; 1229 INSN_CODE (insn) = -1; 1230 1231 return move_for_stack_reg (insn, regstack, pat); 1232 } 1233 1234 /* Swap the condition on a branch, if there is one. Return true if we 1236 found a condition to swap. False if the condition was not used as 1237 such. */ 1238 1239 static int 1240 swap_rtx_condition_1 (rtx pat) 1241 { 1242 const char *fmt; 1243 int i, r = 0; 1244 1245 if (COMPARISON_P (pat)) 1246 { 1247 PUT_CODE (pat, swap_condition (GET_CODE (pat))); 1248 r = 1; 1249 } 1250 else 1251 { 1252 fmt = GET_RTX_FORMAT (GET_CODE (pat)); 1253 for (i = GET_RTX_LENGTH (GET_CODE (pat)) - 1; i >= 0; i--) 1254 { 1255 if (fmt[i] == 'E') 1256 { 1257 int j; 1258 1259 for (j = XVECLEN (pat, i) - 1; j >= 0; j--) 1260 r |= swap_rtx_condition_1 (XVECEXP (pat, i, j)); 1261 } 1262 else if (fmt[i] == 'e') 1263 r |= swap_rtx_condition_1 (XEXP (pat, i)); 1264 } 1265 } 1266 1267 return r; 1268 } 1269 1270 /* This function swaps condition in cc users and returns true 1271 if successful. It is invoked in 2 different modes, one with 1272 DEBUG_SEEN set initially to 0. In this mode, next_flags_user 1273 will skip DEBUG_INSNs that it would otherwise return and just 1274 sets DEBUG_SEEN to 1 in that case. If DEBUG_SEEN is 0 at 1275 the end of toplevel swap_rtx_condition which returns true, 1276 it means no problematic DEBUG_INSNs were seen and all changes 1277 have been applied. If it returns true but DEBUG_SEEN is 1, 1278 it means some problematic DEBUG_INSNs were seen and no changes 1279 have been applied so far. In that case one needs to call 1280 swap_rtx_condition again with DEBUG_SEEN set to -1, in which 1281 case it doesn't skip DEBUG_INSNs, but instead adjusts the 1282 flags related condition in them or resets them as needed. */ 1283 1284 static int 1285 swap_rtx_condition (rtx_insn *insn, int &debug_seen) 1286 { 1287 rtx pat = PATTERN (insn); 1288 1289 /* We're looking for a single set to an HImode temporary. */ 1290 1291 if (GET_CODE (pat) == SET 1292 && REG_P (SET_DEST (pat)) 1293 && REGNO (SET_DEST (pat)) == FLAGS_REG) 1294 { 1295 insn = next_flags_user (insn, debug_seen); 1296 if (insn == NULL_RTX) 1297 return 0; 1298 pat = PATTERN (insn); 1299 } 1300 1301 /* See if this is, or ends in, a fnstsw. If so, we're not doing anything 1302 with the cc value right now. We may be able to search for one 1303 though. */ 1304 1305 if (GET_CODE (pat) == SET 1306 && GET_CODE (SET_SRC (pat)) == UNSPEC 1307 && XINT (SET_SRC (pat), 1) == UNSPEC_FNSTSW) 1308 { 1309 rtx dest = SET_DEST (pat); 1310 1311 /* Search forward looking for the first use of this value. 1312 Stop at block boundaries. */ 1313 while (insn != BB_END (current_block)) 1314 { 1315 insn = NEXT_INSN (insn); 1316 if (INSN_P (insn) && reg_mentioned_p (dest, insn)) 1317 { 1318 if (DEBUG_INSN_P (insn)) 1319 { 1320 if (debug_seen >= 0) 1321 debug_seen = 1; 1322 else 1323 /* Reset the DEBUG insn otherwise. */ 1324 INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC (); 1325 continue; 1326 } 1327 break; 1328 } 1329 if (CALL_P (insn)) 1330 return 0; 1331 } 1332 1333 /* We haven't found it. */ 1334 if (insn == BB_END (current_block)) 1335 return 0; 1336 1337 /* So we've found the insn using this value. If it is anything 1338 other than sahf or the value does not die (meaning we'd have 1339 to search further), then we must give up. */ 1340 pat = PATTERN (insn); 1341 if (GET_CODE (pat) != SET 1342 || GET_CODE (SET_SRC (pat)) != UNSPEC 1343 || XINT (SET_SRC (pat), 1) != UNSPEC_SAHF 1344 || ! dead_or_set_p (insn, dest)) 1345 return 0; 1346 1347 /* Now we are prepared to handle this. */ 1348 insn = next_flags_user (insn, debug_seen); 1349 if (insn == NULL_RTX) 1350 return 0; 1351 pat = PATTERN (insn); 1352 } 1353 1354 if (swap_rtx_condition_1 (pat)) 1355 { 1356 int fail = 0; 1357 if (DEBUG_INSN_P (insn)) 1358 gcc_assert (debug_seen < 0); 1359 else 1360 { 1361 INSN_CODE (insn) = -1; 1362 if (recog_memoized (insn) == -1) 1363 fail = 1; 1364 } 1365 /* In case the flags don't die here, recurse to try fix 1366 following user too. */ 1367 if (!fail && !dead_or_set_p (insn, ix86_flags_rtx)) 1368 { 1369 insn = next_flags_user (insn, debug_seen); 1370 if (!insn || !swap_rtx_condition (insn, debug_seen)) 1371 fail = 1; 1372 } 1373 if (fail || debug_seen == 1) 1374 swap_rtx_condition_1 (pat); 1375 return !fail; 1376 } 1377 return 0; 1378 } 1379 1380 /* Handle a comparison. Special care needs to be taken to avoid 1381 causing comparisons that a 387 cannot do correctly, such as EQ. 1382 1383 Also, a pop insn may need to be emitted. The 387 does have an 1384 `fcompp' insn that can pop two regs, but it is sometimes too expensive 1385 to do this - a `fcomp' followed by a `fstpl %st(0)' may be easier to 1386 set up. */ 1387 1388 static void 1389 compare_for_stack_reg (rtx_insn *insn, stack_ptr regstack, 1390 rtx pat_src, bool can_pop_second_op) 1391 { 1392 rtx *src1, *src2; 1393 rtx src1_note, src2_note; 1394 int debug_seen = 0; 1395 1396 src1 = get_true_reg (&XEXP (pat_src, 0)); 1397 src2 = get_true_reg (&XEXP (pat_src, 1)); 1398 1399 /* ??? If fxch turns out to be cheaper than fstp, give priority to 1400 registers that die in this insn - move those to stack top first. */ 1401 if ((! STACK_REG_P (*src1) 1402 || (STACK_REG_P (*src2) 1403 && get_hard_regnum (regstack, *src2) == FIRST_STACK_REG)) 1404 && swap_rtx_condition (insn, debug_seen)) 1405 { 1406 /* If swap_rtx_condition succeeded but some debug insns 1407 were seen along the way, it has actually reverted all the 1408 changes. Rerun swap_rtx_condition in a mode where DEBUG_ISNSs 1409 will be adjusted as well. */ 1410 if (debug_seen) 1411 { 1412 debug_seen = -1; 1413 swap_rtx_condition (insn, debug_seen); 1414 } 1415 std::swap (XEXP (pat_src, 0), XEXP (pat_src, 1)); 1416 1417 src1 = get_true_reg (&XEXP (pat_src, 0)); 1418 src2 = get_true_reg (&XEXP (pat_src, 1)); 1419 1420 INSN_CODE (insn) = -1; 1421 } 1422 1423 /* We will fix any death note later. */ 1424 1425 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1426 1427 if (STACK_REG_P (*src2)) 1428 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); 1429 else 1430 src2_note = NULL_RTX; 1431 1432 emit_swap_insn (insn, regstack, *src1); 1433 1434 replace_reg (src1, FIRST_STACK_REG); 1435 1436 if (STACK_REG_P (*src2)) 1437 replace_reg (src2, get_hard_regnum (regstack, *src2)); 1438 1439 if (src1_note) 1440 { 1441 if (*src2 == CONST0_RTX (GET_MODE (*src2))) 1442 { 1443 /* This is `ftst' insn that can't pop register. */ 1444 remove_regno_note (insn, REG_DEAD, REGNO (XEXP (src1_note, 0))); 1445 emit_pop_insn (insn, regstack, XEXP (src1_note, 0), 1446 EMIT_AFTER); 1447 } 1448 else 1449 { 1450 pop_stack (regstack, REGNO (XEXP (src1_note, 0))); 1451 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG); 1452 } 1453 } 1454 1455 /* If the second operand dies, handle that. But if the operands are 1456 the same stack register, don't bother, because only one death is 1457 needed, and it was just handled. */ 1458 1459 if (src2_note 1460 && ! (STACK_REG_P (*src1) && STACK_REG_P (*src2) 1461 && REGNO (*src1) == REGNO (*src2))) 1462 { 1463 /* As a special case, two regs may die in this insn if src2 is 1464 next to top of stack and the top of stack also dies. Since 1465 we have already popped src1, "next to top of stack" is really 1466 at top (FIRST_STACK_REG) now. */ 1467 1468 if (get_hard_regnum (regstack, XEXP (src2_note, 0)) == FIRST_STACK_REG 1469 && src1_note && can_pop_second_op) 1470 { 1471 pop_stack (regstack, REGNO (XEXP (src2_note, 0))); 1472 replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG + 1); 1473 } 1474 else 1475 { 1476 /* The 386 can only represent death of the first operand in 1477 the case handled above. In all other cases, emit a separate 1478 pop and remove the death note from here. */ 1479 remove_regno_note (insn, REG_DEAD, REGNO (XEXP (src2_note, 0))); 1480 emit_pop_insn (insn, regstack, XEXP (src2_note, 0), 1481 EMIT_AFTER); 1482 } 1483 } 1484 } 1485 1486 /* Substitute hardware stack regs in debug insn INSN, using stack 1488 layout REGSTACK. If we can't find a hardware stack reg for any of 1489 the REGs in it, reset the debug insn. */ 1490 1491 static void 1492 subst_all_stack_regs_in_debug_insn (rtx_insn *insn, struct stack_def *regstack) 1493 { 1494 subrtx_ptr_iterator::array_type array; 1495 FOR_EACH_SUBRTX_PTR (iter, array, &INSN_VAR_LOCATION_LOC (insn), NONCONST) 1496 { 1497 rtx *loc = *iter; 1498 rtx x = *loc; 1499 if (STACK_REG_P (x)) 1500 { 1501 int hard_regno = get_hard_regnum (regstack, x); 1502 1503 /* If we can't find an active register, reset this debug insn. */ 1504 if (hard_regno == -1) 1505 { 1506 INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC (); 1507 return; 1508 } 1509 1510 gcc_assert (hard_regno >= FIRST_STACK_REG); 1511 replace_reg (loc, hard_regno); 1512 iter.skip_subrtxes (); 1513 } 1514 } 1515 } 1516 1517 /* Substitute new registers in PAT, which is part of INSN. REGSTACK 1518 is the current register layout. Return whether a control flow insn 1519 was deleted in the process. */ 1520 1521 static bool 1522 subst_stack_regs_pat (rtx_insn *insn, stack_ptr regstack, rtx pat) 1523 { 1524 rtx *dest, *src; 1525 bool control_flow_insn_deleted = false; 1526 1527 switch (GET_CODE (pat)) 1528 { 1529 case USE: 1530 /* Deaths in USE insns can happen in non optimizing compilation. 1531 Handle them by popping the dying register. */ 1532 src = get_true_reg (&XEXP (pat, 0)); 1533 if (STACK_REG_P (*src) 1534 && find_regno_note (insn, REG_DEAD, REGNO (*src))) 1535 { 1536 /* USEs are ignored for liveness information so USEs of dead 1537 register might happen. */ 1538 if (TEST_HARD_REG_BIT (regstack->reg_set, REGNO (*src))) 1539 emit_pop_insn (insn, regstack, *src, EMIT_AFTER); 1540 return control_flow_insn_deleted; 1541 } 1542 /* Uninitialized USE might happen for functions returning uninitialized 1543 value. We will properly initialize the USE on the edge to EXIT_BLOCK, 1544 so it is safe to ignore the use here. This is consistent with behavior 1545 of dataflow analyzer that ignores USE too. (This also imply that 1546 forcibly initializing the register to NaN here would lead to ICE later, 1547 since the REG_DEAD notes are not issued.) */ 1548 break; 1549 1550 case VAR_LOCATION: 1551 gcc_unreachable (); 1552 1553 case CLOBBER: 1554 { 1555 rtx note; 1556 1557 dest = get_true_reg (&XEXP (pat, 0)); 1558 if (STACK_REG_P (*dest)) 1559 { 1560 note = find_reg_note (insn, REG_DEAD, *dest); 1561 1562 if (pat != PATTERN (insn)) 1563 { 1564 /* The fix_truncdi_1 pattern wants to be able to 1565 allocate its own scratch register. It does this by 1566 clobbering an fp reg so that it is assured of an 1567 empty reg-stack register. If the register is live, 1568 kill it now. Remove the DEAD/UNUSED note so we 1569 don't try to kill it later too. 1570 1571 In reality the UNUSED note can be absent in some 1572 complicated cases when the register is reused for 1573 partially set variable. */ 1574 1575 if (note) 1576 emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE); 1577 else 1578 note = find_reg_note (insn, REG_UNUSED, *dest); 1579 if (note) 1580 remove_note (insn, note); 1581 replace_reg (dest, FIRST_STACK_REG + 1); 1582 } 1583 else 1584 { 1585 /* A top-level clobber with no REG_DEAD, and no hard-regnum 1586 indicates an uninitialized value. Because reload removed 1587 all other clobbers, this must be due to a function 1588 returning without a value. Load up a NaN. */ 1589 1590 if (!note) 1591 { 1592 rtx t = *dest; 1593 if (COMPLEX_MODE_P (GET_MODE (t))) 1594 { 1595 rtx u = FP_MODE_REG (REGNO (t) + 1, SFmode); 1596 if (get_hard_regnum (regstack, u) == -1) 1597 { 1598 rtx pat2 = gen_rtx_CLOBBER (VOIDmode, u); 1599 rtx_insn *insn2 = emit_insn_before (pat2, insn); 1600 control_flow_insn_deleted 1601 |= move_nan_for_stack_reg (insn2, regstack, u); 1602 } 1603 } 1604 if (get_hard_regnum (regstack, t) == -1) 1605 control_flow_insn_deleted 1606 |= move_nan_for_stack_reg (insn, regstack, t); 1607 } 1608 } 1609 } 1610 break; 1611 } 1612 1613 case SET: 1614 { 1615 rtx *src1 = (rtx *) 0, *src2; 1616 rtx src1_note, src2_note; 1617 rtx pat_src; 1618 1619 dest = get_true_reg (&SET_DEST (pat)); 1620 src = get_true_reg (&SET_SRC (pat)); 1621 pat_src = SET_SRC (pat); 1622 1623 /* See if this is a `movM' pattern, and handle elsewhere if so. */ 1624 if (STACK_REG_P (*src) 1625 || (STACK_REG_P (*dest) 1626 && (REG_P (*src) || MEM_P (*src) 1627 || CONST_DOUBLE_P (*src)))) 1628 { 1629 control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat); 1630 break; 1631 } 1632 1633 switch (GET_CODE (pat_src)) 1634 { 1635 case CALL: 1636 { 1637 int count; 1638 for (count = REG_NREGS (*dest); --count >= 0;) 1639 { 1640 regstack->reg[++regstack->top] = REGNO (*dest) + count; 1641 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest) + count); 1642 } 1643 } 1644 replace_reg (dest, FIRST_STACK_REG); 1645 break; 1646 1647 case REG: 1648 gcc_unreachable (); 1649 1650 /* Fall through. */ 1651 1652 case FLOAT_TRUNCATE: 1653 case SQRT: 1654 case ABS: 1655 case NEG: 1656 /* These insns only operate on the top of the stack. It's 1657 possible that the tstM case results in a REG_DEAD note on the 1658 source. */ 1659 1660 if (src1 == 0) 1661 src1 = get_true_reg (&XEXP (pat_src, 0)); 1662 1663 emit_swap_insn (insn, regstack, *src1); 1664 1665 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1666 1667 if (STACK_REG_P (*dest)) 1668 replace_reg (dest, FIRST_STACK_REG); 1669 1670 if (src1_note) 1671 { 1672 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG); 1673 regstack->top--; 1674 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1)); 1675 } 1676 1677 replace_reg (src1, FIRST_STACK_REG); 1678 break; 1679 1680 case MINUS: 1681 case DIV: 1682 /* On i386, reversed forms of subM3 and divM3 exist for 1683 MODE_FLOAT, so the same code that works for addM3 and mulM3 1684 can be used. */ 1685 case MULT: 1686 case PLUS: 1687 /* These insns can accept the top of stack as a destination 1688 from a stack reg or mem, or can use the top of stack as a 1689 source and some other stack register (possibly top of stack) 1690 as a destination. */ 1691 1692 src1 = get_true_reg (&XEXP (pat_src, 0)); 1693 src2 = get_true_reg (&XEXP (pat_src, 1)); 1694 1695 /* We will fix any death note later. */ 1696 1697 if (STACK_REG_P (*src1)) 1698 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1699 else 1700 src1_note = NULL_RTX; 1701 if (STACK_REG_P (*src2)) 1702 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); 1703 else 1704 src2_note = NULL_RTX; 1705 1706 /* If either operand is not a stack register, then the dest 1707 must be top of stack. */ 1708 1709 if (! STACK_REG_P (*src1) || ! STACK_REG_P (*src2)) 1710 emit_swap_insn (insn, regstack, *dest); 1711 else 1712 { 1713 /* Both operands are REG. If neither operand is already 1714 at the top of stack, choose to make the one that is the 1715 dest the new top of stack. */ 1716 1717 int src1_hard_regnum, src2_hard_regnum; 1718 1719 src1_hard_regnum = get_hard_regnum (regstack, *src1); 1720 src2_hard_regnum = get_hard_regnum (regstack, *src2); 1721 1722 /* If the source is not live, this is yet another case of 1723 uninitialized variables. Load up a NaN instead. */ 1724 if (src1_hard_regnum == -1) 1725 { 1726 rtx pat2 = gen_rtx_CLOBBER (VOIDmode, *src1); 1727 rtx_insn *insn2 = emit_insn_before (pat2, insn); 1728 control_flow_insn_deleted 1729 |= move_nan_for_stack_reg (insn2, regstack, *src1); 1730 } 1731 if (src2_hard_regnum == -1) 1732 { 1733 rtx pat2 = gen_rtx_CLOBBER (VOIDmode, *src2); 1734 rtx_insn *insn2 = emit_insn_before (pat2, insn); 1735 control_flow_insn_deleted 1736 |= move_nan_for_stack_reg (insn2, regstack, *src2); 1737 } 1738 1739 if (src1_hard_regnum != FIRST_STACK_REG 1740 && src2_hard_regnum != FIRST_STACK_REG) 1741 emit_swap_insn (insn, regstack, *dest); 1742 } 1743 1744 if (STACK_REG_P (*src1)) 1745 replace_reg (src1, get_hard_regnum (regstack, *src1)); 1746 if (STACK_REG_P (*src2)) 1747 replace_reg (src2, get_hard_regnum (regstack, *src2)); 1748 1749 if (src1_note) 1750 { 1751 rtx src1_reg = XEXP (src1_note, 0); 1752 1753 /* If the register that dies is at the top of stack, then 1754 the destination is somewhere else - merely substitute it. 1755 But if the reg that dies is not at top of stack, then 1756 move the top of stack to the dead reg, as though we had 1757 done the insn and then a store-with-pop. */ 1758 1759 if (REGNO (src1_reg) == regstack->reg[regstack->top]) 1760 { 1761 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1762 replace_reg (dest, get_hard_regnum (regstack, *dest)); 1763 } 1764 else 1765 { 1766 int regno = get_hard_regnum (regstack, src1_reg); 1767 1768 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1769 replace_reg (dest, regno); 1770 1771 regstack->reg[regstack->top - (regno - FIRST_STACK_REG)] 1772 = regstack->reg[regstack->top]; 1773 } 1774 1775 CLEAR_HARD_REG_BIT (regstack->reg_set, 1776 REGNO (XEXP (src1_note, 0))); 1777 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG); 1778 regstack->top--; 1779 } 1780 else if (src2_note) 1781 { 1782 rtx src2_reg = XEXP (src2_note, 0); 1783 if (REGNO (src2_reg) == regstack->reg[regstack->top]) 1784 { 1785 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1786 replace_reg (dest, get_hard_regnum (regstack, *dest)); 1787 } 1788 else 1789 { 1790 int regno = get_hard_regnum (regstack, src2_reg); 1791 1792 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1793 replace_reg (dest, regno); 1794 1795 regstack->reg[regstack->top - (regno - FIRST_STACK_REG)] 1796 = regstack->reg[regstack->top]; 1797 } 1798 1799 CLEAR_HARD_REG_BIT (regstack->reg_set, 1800 REGNO (XEXP (src2_note, 0))); 1801 replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG); 1802 regstack->top--; 1803 } 1804 else 1805 { 1806 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1807 replace_reg (dest, get_hard_regnum (regstack, *dest)); 1808 } 1809 1810 /* Keep operand 1 matching with destination. */ 1811 if (COMMUTATIVE_ARITH_P (pat_src) 1812 && REG_P (*src1) && REG_P (*src2) 1813 && REGNO (*src1) != REGNO (*dest)) 1814 { 1815 int tmp = REGNO (*src1); 1816 replace_reg (src1, REGNO (*src2)); 1817 replace_reg (src2, tmp); 1818 } 1819 break; 1820 1821 case UNSPEC: 1822 switch (XINT (pat_src, 1)) 1823 { 1824 case UNSPEC_FIST: 1825 case UNSPEC_FIST_ATOMIC: 1826 1827 case UNSPEC_FIST_FLOOR: 1828 case UNSPEC_FIST_CEIL: 1829 1830 /* These insns only operate on the top of the stack. */ 1831 1832 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 1833 emit_swap_insn (insn, regstack, *src1); 1834 1835 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1836 1837 if (STACK_REG_P (*dest)) 1838 replace_reg (dest, FIRST_STACK_REG); 1839 1840 if (src1_note) 1841 { 1842 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG); 1843 regstack->top--; 1844 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1)); 1845 } 1846 1847 replace_reg (src1, FIRST_STACK_REG); 1848 break; 1849 1850 case UNSPEC_FXAM: 1851 1852 /* This insn only operate on the top of the stack. */ 1853 1854 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 1855 emit_swap_insn (insn, regstack, *src1); 1856 1857 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1858 1859 replace_reg (src1, FIRST_STACK_REG); 1860 1861 if (src1_note) 1862 { 1863 remove_regno_note (insn, REG_DEAD, 1864 REGNO (XEXP (src1_note, 0))); 1865 emit_pop_insn (insn, regstack, XEXP (src1_note, 0), 1866 EMIT_AFTER); 1867 } 1868 1869 break; 1870 1871 case UNSPEC_SIN: 1872 case UNSPEC_COS: 1873 case UNSPEC_FRNDINT: 1874 case UNSPEC_F2XM1: 1875 1876 case UNSPEC_FRNDINT_ROUNDEVEN: 1877 case UNSPEC_FRNDINT_FLOOR: 1878 case UNSPEC_FRNDINT_CEIL: 1879 case UNSPEC_FRNDINT_TRUNC: 1880 1881 /* Above insns operate on the top of the stack. */ 1882 1883 case UNSPEC_SINCOS_COS: 1884 case UNSPEC_XTRACT_FRACT: 1885 1886 /* Above insns operate on the top two stack slots, 1887 first part of one input, double output insn. */ 1888 1889 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 1890 1891 emit_swap_insn (insn, regstack, *src1); 1892 1893 /* Input should never die, it is replaced with output. */ 1894 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1895 gcc_assert (!src1_note); 1896 1897 if (STACK_REG_P (*dest)) 1898 replace_reg (dest, FIRST_STACK_REG); 1899 1900 replace_reg (src1, FIRST_STACK_REG); 1901 break; 1902 1903 case UNSPEC_SINCOS_SIN: 1904 case UNSPEC_XTRACT_EXP: 1905 1906 /* These insns operate on the top two stack slots, 1907 second part of one input, double output insn. */ 1908 1909 regstack->top++; 1910 /* FALLTHRU */ 1911 1912 case UNSPEC_TAN: 1913 1914 /* For UNSPEC_TAN, regstack->top is already increased 1915 by inherent load of constant 1.0. */ 1916 1917 /* Output value is generated in the second stack slot. 1918 Move current value from second slot to the top. */ 1919 regstack->reg[regstack->top] 1920 = regstack->reg[regstack->top - 1]; 1921 1922 gcc_assert (STACK_REG_P (*dest)); 1923 1924 regstack->reg[regstack->top - 1] = REGNO (*dest); 1925 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1926 replace_reg (dest, FIRST_STACK_REG + 1); 1927 1928 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 1929 1930 replace_reg (src1, FIRST_STACK_REG); 1931 break; 1932 1933 case UNSPEC_FPATAN: 1934 case UNSPEC_FYL2X: 1935 case UNSPEC_FYL2XP1: 1936 /* These insns operate on the top two stack slots. */ 1937 1938 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 1939 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1)); 1940 1941 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1942 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); 1943 1944 swap_to_top (insn, regstack, *src1, *src2); 1945 1946 replace_reg (src1, FIRST_STACK_REG); 1947 replace_reg (src2, FIRST_STACK_REG + 1); 1948 1949 if (src1_note) 1950 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG); 1951 if (src2_note) 1952 replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG + 1); 1953 1954 /* Pop both input operands from the stack. */ 1955 CLEAR_HARD_REG_BIT (regstack->reg_set, 1956 regstack->reg[regstack->top]); 1957 CLEAR_HARD_REG_BIT (regstack->reg_set, 1958 regstack->reg[regstack->top - 1]); 1959 regstack->top -= 2; 1960 1961 /* Push the result back onto the stack. */ 1962 regstack->reg[++regstack->top] = REGNO (*dest); 1963 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1964 replace_reg (dest, FIRST_STACK_REG); 1965 break; 1966 1967 case UNSPEC_FSCALE_FRACT: 1968 case UNSPEC_FPREM_F: 1969 case UNSPEC_FPREM1_F: 1970 /* These insns operate on the top two stack slots, 1971 first part of double input, double output insn. */ 1972 1973 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 1974 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1)); 1975 1976 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 1977 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); 1978 1979 /* Inputs should never die, they are 1980 replaced with outputs. */ 1981 gcc_assert (!src1_note); 1982 gcc_assert (!src2_note); 1983 1984 swap_to_top (insn, regstack, *src1, *src2); 1985 1986 /* Push the result back onto stack. Empty stack slot 1987 will be filled in second part of insn. */ 1988 if (STACK_REG_P (*dest)) 1989 { 1990 regstack->reg[regstack->top] = REGNO (*dest); 1991 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 1992 replace_reg (dest, FIRST_STACK_REG); 1993 } 1994 1995 replace_reg (src1, FIRST_STACK_REG); 1996 replace_reg (src2, FIRST_STACK_REG + 1); 1997 break; 1998 1999 case UNSPEC_FSCALE_EXP: 2000 case UNSPEC_FPREM_U: 2001 case UNSPEC_FPREM1_U: 2002 /* These insns operate on the top two stack slots, 2003 second part of double input, double output insn. */ 2004 2005 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 2006 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1)); 2007 2008 /* Push the result back onto stack. Fill empty slot from 2009 first part of insn and fix top of stack pointer. */ 2010 if (STACK_REG_P (*dest)) 2011 { 2012 regstack->reg[regstack->top - 1] = REGNO (*dest); 2013 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 2014 replace_reg (dest, FIRST_STACK_REG + 1); 2015 } 2016 2017 replace_reg (src1, FIRST_STACK_REG); 2018 replace_reg (src2, FIRST_STACK_REG + 1); 2019 break; 2020 2021 case UNSPEC_C2_FLAG: 2022 /* This insn operates on the top two stack slots, 2023 third part of C2 setting double input insn. */ 2024 2025 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0)); 2026 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1)); 2027 2028 replace_reg (src1, FIRST_STACK_REG); 2029 replace_reg (src2, FIRST_STACK_REG + 1); 2030 break; 2031 2032 case UNSPEC_FNSTSW: 2033 /* Combined fcomp+fnstsw generated for doing well with 2034 CSE. When optimizing this would have been broken 2035 up before now. */ 2036 2037 pat_src = XVECEXP (pat_src, 0, 0); 2038 if (GET_CODE (pat_src) == COMPARE) 2039 goto do_compare; 2040 2041 /* Fall through. */ 2042 2043 case UNSPEC_NOTRAP: 2044 2045 pat_src = XVECEXP (pat_src, 0, 0); 2046 gcc_assert (GET_CODE (pat_src) == COMPARE); 2047 goto do_compare; 2048 2049 default: 2050 gcc_unreachable (); 2051 } 2052 break; 2053 2054 case COMPARE: 2055 do_compare: 2056 /* `fcomi' insn can't pop two regs. */ 2057 compare_for_stack_reg (insn, regstack, pat_src, 2058 REGNO (*dest) != FLAGS_REG); 2059 break; 2060 2061 case IF_THEN_ELSE: 2062 /* This insn requires the top of stack to be the destination. */ 2063 2064 src1 = get_true_reg (&XEXP (pat_src, 1)); 2065 src2 = get_true_reg (&XEXP (pat_src, 2)); 2066 2067 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); 2068 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); 2069 2070 /* If the comparison operator is an FP comparison operator, 2071 it is handled correctly by compare_for_stack_reg () who 2072 will move the destination to the top of stack. But if the 2073 comparison operator is not an FP comparison operator, we 2074 have to handle it here. */ 2075 if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG 2076 && REGNO (*dest) != regstack->reg[regstack->top]) 2077 { 2078 /* In case one of operands is the top of stack and the operands 2079 dies, it is safe to make it the destination operand by 2080 reversing the direction of cmove and avoid fxch. */ 2081 if ((REGNO (*src1) == regstack->reg[regstack->top] 2082 && src1_note) 2083 || (REGNO (*src2) == regstack->reg[regstack->top] 2084 && src2_note)) 2085 { 2086 int idx1 = (get_hard_regnum (regstack, *src1) 2087 - FIRST_STACK_REG); 2088 int idx2 = (get_hard_regnum (regstack, *src2) 2089 - FIRST_STACK_REG); 2090 2091 /* Make reg-stack believe that the operands are already 2092 swapped on the stack */ 2093 regstack->reg[regstack->top - idx1] = REGNO (*src2); 2094 regstack->reg[regstack->top - idx2] = REGNO (*src1); 2095 2096 /* Reverse condition to compensate the operand swap. 2097 i386 do have comparison always reversible. */ 2098 PUT_CODE (XEXP (pat_src, 0), 2099 reversed_comparison_code (XEXP (pat_src, 0), insn)); 2100 } 2101 else 2102 emit_swap_insn (insn, regstack, *dest); 2103 } 2104 2105 { 2106 rtx src_note [3]; 2107 int i; 2108 2109 src_note[0] = 0; 2110 src_note[1] = src1_note; 2111 src_note[2] = src2_note; 2112 2113 if (STACK_REG_P (*src1)) 2114 replace_reg (src1, get_hard_regnum (regstack, *src1)); 2115 if (STACK_REG_P (*src2)) 2116 replace_reg (src2, get_hard_regnum (regstack, *src2)); 2117 2118 for (i = 1; i <= 2; i++) 2119 if (src_note [i]) 2120 { 2121 int regno = REGNO (XEXP (src_note[i], 0)); 2122 2123 /* If the register that dies is not at the top of 2124 stack, then move the top of stack to the dead reg. 2125 Top of stack should never die, as it is the 2126 destination. */ 2127 gcc_assert (regno != regstack->reg[regstack->top]); 2128 remove_regno_note (insn, REG_DEAD, regno); 2129 emit_pop_insn (insn, regstack, XEXP (src_note[i], 0), 2130 EMIT_AFTER); 2131 } 2132 } 2133 2134 /* Make dest the top of stack. Add dest to regstack if 2135 not present. */ 2136 if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG) 2137 regstack->reg[++regstack->top] = REGNO (*dest); 2138 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); 2139 replace_reg (dest, FIRST_STACK_REG); 2140 break; 2141 2142 default: 2143 gcc_unreachable (); 2144 } 2145 break; 2146 } 2147 2148 default: 2149 break; 2150 } 2151 2152 return control_flow_insn_deleted; 2153 } 2154 2155 /* Substitute hard regnums for any stack regs in INSN, which has 2157 N_INPUTS inputs and N_OUTPUTS outputs. REGSTACK is the stack info 2158 before the insn, and is updated with changes made here. 2159 2160 There are several requirements and assumptions about the use of 2161 stack-like regs in asm statements. These rules are enforced by 2162 record_asm_stack_regs; see comments there for details. Any 2163 asm_operands left in the RTL at this point may be assume to meet the 2164 requirements, since record_asm_stack_regs removes any problem asm. */ 2165 2166 static void 2167 subst_asm_stack_regs (rtx_insn *insn, stack_ptr regstack) 2168 { 2169 rtx body = PATTERN (insn); 2170 2171 rtx *note_reg; /* Array of note contents */ 2172 rtx **note_loc; /* Address of REG field of each note */ 2173 enum reg_note *note_kind; /* The type of each note */ 2174 2175 rtx *clobber_reg = 0; 2176 rtx **clobber_loc = 0; 2177 2178 struct stack_def temp_stack; 2179 int n_notes; 2180 int n_clobbers; 2181 rtx note; 2182 int i; 2183 int n_inputs, n_outputs; 2184 2185 if (! check_asm_stack_operands (insn)) 2186 return; 2187 2188 /* Find out what the constraints required. If no constraint 2189 alternative matches, that is a compiler bug: we should have caught 2190 such an insn in check_asm_stack_operands. */ 2191 extract_constrain_insn (insn); 2192 2193 preprocess_constraints (insn); 2194 const operand_alternative *op_alt = which_op_alt (); 2195 2196 get_asm_operands_in_out (body, &n_outputs, &n_inputs); 2197 2198 /* Strip SUBREGs here to make the following code simpler. */ 2199 for (i = 0; i < recog_data.n_operands; i++) 2200 if (GET_CODE (recog_data.operand[i]) == SUBREG 2201 && REG_P (SUBREG_REG (recog_data.operand[i]))) 2202 { 2203 recog_data.operand_loc[i] = & SUBREG_REG (recog_data.operand[i]); 2204 recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]); 2205 } 2206 2207 /* Set up NOTE_REG, NOTE_LOC and NOTE_KIND. */ 2208 2209 for (i = 0, note = REG_NOTES (insn); note; note = XEXP (note, 1)) 2210 i++; 2211 2212 note_reg = XALLOCAVEC (rtx, i); 2213 note_loc = XALLOCAVEC (rtx *, i); 2214 note_kind = XALLOCAVEC (enum reg_note, i); 2215 2216 n_notes = 0; 2217 for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) 2218 { 2219 if (GET_CODE (note) != EXPR_LIST) 2220 continue; 2221 rtx reg = XEXP (note, 0); 2222 rtx *loc = & XEXP (note, 0); 2223 2224 if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg))) 2225 { 2226 loc = & SUBREG_REG (reg); 2227 reg = SUBREG_REG (reg); 2228 } 2229 2230 if (STACK_REG_P (reg) 2231 && (REG_NOTE_KIND (note) == REG_DEAD 2232 || REG_NOTE_KIND (note) == REG_UNUSED)) 2233 { 2234 note_reg[n_notes] = reg; 2235 note_loc[n_notes] = loc; 2236 note_kind[n_notes] = REG_NOTE_KIND (note); 2237 n_notes++; 2238 } 2239 } 2240 2241 /* Set up CLOBBER_REG and CLOBBER_LOC. */ 2242 2243 n_clobbers = 0; 2244 2245 if (GET_CODE (body) == PARALLEL) 2246 { 2247 clobber_reg = XALLOCAVEC (rtx, XVECLEN (body, 0)); 2248 clobber_loc = XALLOCAVEC (rtx *, XVECLEN (body, 0)); 2249 2250 for (i = 0; i < XVECLEN (body, 0); i++) 2251 if (GET_CODE (XVECEXP (body, 0, i)) == CLOBBER) 2252 { 2253 rtx clobber = XVECEXP (body, 0, i); 2254 rtx reg = XEXP (clobber, 0); 2255 rtx *loc = & XEXP (clobber, 0); 2256 2257 if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg))) 2258 { 2259 loc = & SUBREG_REG (reg); 2260 reg = SUBREG_REG (reg); 2261 } 2262 2263 if (STACK_REG_P (reg)) 2264 { 2265 clobber_reg[n_clobbers] = reg; 2266 clobber_loc[n_clobbers] = loc; 2267 n_clobbers++; 2268 } 2269 } 2270 } 2271 2272 temp_stack = *regstack; 2273 2274 /* Put the input regs into the desired place in TEMP_STACK. */ 2275 2276 for (i = n_outputs; i < n_outputs + n_inputs; i++) 2277 if (STACK_REG_P (recog_data.operand[i]) 2278 && reg_class_subset_p (op_alt[i].cl, FLOAT_REGS) 2279 && op_alt[i].cl != FLOAT_REGS) 2280 { 2281 /* If an operand needs to be in a particular reg in 2282 FLOAT_REGS, the constraint was either 't' or 'u'. Since 2283 these constraints are for single register classes, and 2284 reload guaranteed that operand[i] is already in that class, 2285 we can just use REGNO (recog_data.operand[i]) to know which 2286 actual reg this operand needs to be in. */ 2287 2288 int regno = get_hard_regnum (&temp_stack, recog_data.operand[i]); 2289 2290 gcc_assert (regno >= 0); 2291 2292 if ((unsigned int) regno != REGNO (recog_data.operand[i])) 2293 { 2294 /* recog_data.operand[i] is not in the right place. Find 2295 it and swap it with whatever is already in I's place. 2296 K is where recog_data.operand[i] is now. J is where it 2297 should be. */ 2298 int j, k; 2299 2300 k = temp_stack.top - (regno - FIRST_STACK_REG); 2301 j = (temp_stack.top 2302 - (REGNO (recog_data.operand[i]) - FIRST_STACK_REG)); 2303 2304 std::swap (temp_stack.reg[j], temp_stack.reg[k]); 2305 } 2306 } 2307 2308 /* Emit insns before INSN to make sure the reg-stack is in the right 2309 order. */ 2310 2311 change_stack (insn, regstack, &temp_stack, EMIT_BEFORE); 2312 2313 /* Make the needed input register substitutions. Do death notes and 2314 clobbers too, because these are for inputs, not outputs. */ 2315 2316 for (i = n_outputs; i < n_outputs + n_inputs; i++) 2317 if (STACK_REG_P (recog_data.operand[i])) 2318 { 2319 int regnum = get_hard_regnum (regstack, recog_data.operand[i]); 2320 2321 gcc_assert (regnum >= 0); 2322 2323 replace_reg (recog_data.operand_loc[i], regnum); 2324 } 2325 2326 for (i = 0; i < n_notes; i++) 2327 if (note_kind[i] == REG_DEAD) 2328 { 2329 int regnum = get_hard_regnum (regstack, note_reg[i]); 2330 2331 gcc_assert (regnum >= 0); 2332 2333 replace_reg (note_loc[i], regnum); 2334 } 2335 2336 for (i = 0; i < n_clobbers; i++) 2337 { 2338 /* It's OK for a CLOBBER to reference a reg that is not live. 2339 Don't try to replace it in that case. */ 2340 int regnum = get_hard_regnum (regstack, clobber_reg[i]); 2341 2342 if (regnum >= 0) 2343 replace_reg (clobber_loc[i], regnum); 2344 } 2345 2346 /* Now remove from REGSTACK any inputs that the asm implicitly popped. */ 2347 2348 for (i = n_outputs; i < n_outputs + n_inputs; i++) 2349 if (STACK_REG_P (recog_data.operand[i])) 2350 { 2351 /* An input reg is implicitly popped if it is tied to an 2352 output, or if there is a CLOBBER for it. */ 2353 int j; 2354 2355 for (j = 0; j < n_clobbers; j++) 2356 if (operands_match_p (clobber_reg[j], recog_data.operand[i])) 2357 break; 2358 2359 if (j < n_clobbers || op_alt[i].matches >= 0) 2360 { 2361 /* recog_data.operand[i] might not be at the top of stack. 2362 But that's OK, because all we need to do is pop the 2363 right number of regs off of the top of the reg-stack. 2364 record_asm_stack_regs guaranteed that all implicitly 2365 popped regs were grouped at the top of the reg-stack. */ 2366 2367 CLEAR_HARD_REG_BIT (regstack->reg_set, 2368 regstack->reg[regstack->top]); 2369 regstack->top--; 2370 } 2371 } 2372 2373 /* Now add to REGSTACK any outputs that the asm implicitly pushed. 2374 Note that there isn't any need to substitute register numbers. 2375 ??? Explain why this is true. */ 2376 2377 for (i = LAST_STACK_REG; i >= FIRST_STACK_REG; i--) 2378 { 2379 /* See if there is an output for this hard reg. */ 2380 int j; 2381 2382 for (j = 0; j < n_outputs; j++) 2383 if (STACK_REG_P (recog_data.operand[j]) 2384 && REGNO (recog_data.operand[j]) == (unsigned) i) 2385 { 2386 regstack->reg[++regstack->top] = i; 2387 SET_HARD_REG_BIT (regstack->reg_set, i); 2388 break; 2389 } 2390 } 2391 2392 /* Now emit a pop insn for any REG_UNUSED output, or any REG_DEAD 2393 input that the asm didn't implicitly pop. If the asm didn't 2394 implicitly pop an input reg, that reg will still be live. 2395 2396 Note that we can't use find_regno_note here: the register numbers 2397 in the death notes have already been substituted. */ 2398 2399 for (i = 0; i < n_outputs; i++) 2400 if (STACK_REG_P (recog_data.operand[i])) 2401 { 2402 int j; 2403 2404 for (j = 0; j < n_notes; j++) 2405 if (REGNO (recog_data.operand[i]) == REGNO (note_reg[j]) 2406 && note_kind[j] == REG_UNUSED) 2407 { 2408 insn = emit_pop_insn (insn, regstack, recog_data.operand[i], 2409 EMIT_AFTER); 2410 break; 2411 } 2412 } 2413 2414 for (i = n_outputs; i < n_outputs + n_inputs; i++) 2415 if (STACK_REG_P (recog_data.operand[i])) 2416 { 2417 int j; 2418 2419 for (j = 0; j < n_notes; j++) 2420 if (REGNO (recog_data.operand[i]) == REGNO (note_reg[j]) 2421 && note_kind[j] == REG_DEAD 2422 && TEST_HARD_REG_BIT (regstack->reg_set, 2423 REGNO (recog_data.operand[i]))) 2424 { 2425 insn = emit_pop_insn (insn, regstack, recog_data.operand[i], 2426 EMIT_AFTER); 2427 break; 2428 } 2429 } 2430 } 2431 2432 /* Return true if a function call is allowed to alter some or all bits 2433 of any stack reg. */ 2434 static bool 2435 callee_clobbers_any_stack_reg (const function_abi & callee_abi) 2436 { 2437 for (unsigned regno = FIRST_STACK_REG; regno <= LAST_STACK_REG; regno++) 2438 if (callee_abi.clobbers_at_least_part_of_reg_p (regno)) 2439 return true; 2440 return false; 2441 } 2442 2443 2444 /* Substitute stack hard reg numbers for stack virtual registers in 2446 INSN. Non-stack register numbers are not changed. REGSTACK is the 2447 current stack content. Insns may be emitted as needed to arrange the 2448 stack for the 387 based on the contents of the insn. Return whether 2449 a control flow insn was deleted in the process. */ 2450 2451 static bool 2452 subst_stack_regs (rtx_insn *insn, stack_ptr regstack) 2453 { 2454 rtx *note_link, note; 2455 bool control_flow_insn_deleted = false; 2456 int i; 2457 2458 /* If the target of the call doesn't clobber any stack registers, 2459 Don't clear the arguments. */ 2460 if (CALL_P (insn) 2461 && callee_clobbers_any_stack_reg (insn_callee_abi (insn))) 2462 { 2463 int top = regstack->top; 2464 2465 /* If there are any floating point parameters to be passed in 2466 registers for this call, make sure they are in the right 2467 order. */ 2468 2469 if (top >= 0) 2470 { 2471 straighten_stack (insn, regstack); 2472 2473 /* Now mark the arguments as dead after the call. */ 2474 2475 while (regstack->top >= 0) 2476 { 2477 CLEAR_HARD_REG_BIT (regstack->reg_set, FIRST_STACK_REG + regstack->top); 2478 regstack->top--; 2479 } 2480 } 2481 } 2482 2483 /* Do the actual substitution if any stack regs are mentioned. 2484 Since we only record whether entire insn mentions stack regs, and 2485 subst_stack_regs_pat only works for patterns that contain stack regs, 2486 we must check each pattern in a parallel here. A call_value_pop could 2487 fail otherwise. */ 2488 2489 if (stack_regs_mentioned (insn)) 2490 { 2491 int n_operands = asm_noperands (PATTERN (insn)); 2492 if (n_operands >= 0) 2493 { 2494 /* This insn is an `asm' with operands. Decode the operands, 2495 decide how many are inputs, and do register substitution. 2496 Any REG_UNUSED notes will be handled by subst_asm_stack_regs. */ 2497 2498 subst_asm_stack_regs (insn, regstack); 2499 return control_flow_insn_deleted; 2500 } 2501 2502 if (GET_CODE (PATTERN (insn)) == PARALLEL) 2503 for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++) 2504 { 2505 if (stack_regs_mentioned_p (XVECEXP (PATTERN (insn), 0, i))) 2506 { 2507 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == CLOBBER) 2508 XVECEXP (PATTERN (insn), 0, i) 2509 = shallow_copy_rtx (XVECEXP (PATTERN (insn), 0, i)); 2510 control_flow_insn_deleted 2511 |= subst_stack_regs_pat (insn, regstack, 2512 XVECEXP (PATTERN (insn), 0, i)); 2513 } 2514 } 2515 else 2516 control_flow_insn_deleted 2517 |= subst_stack_regs_pat (insn, regstack, PATTERN (insn)); 2518 } 2519 2520 /* subst_stack_regs_pat may have deleted a no-op insn. If so, any 2521 REG_UNUSED will already have been dealt with, so just return. */ 2522 2523 if (NOTE_P (insn) || insn->deleted ()) 2524 return control_flow_insn_deleted; 2525 2526 /* If this a noreturn call, we can't insert pop insns after it. 2527 Instead, reset the stack state to empty. */ 2528 if (CALL_P (insn) 2529 && find_reg_note (insn, REG_NORETURN, NULL)) 2530 { 2531 regstack->top = -1; 2532 CLEAR_HARD_REG_SET (regstack->reg_set); 2533 return control_flow_insn_deleted; 2534 } 2535 2536 /* If there is a REG_UNUSED note on a stack register on this insn, 2537 the indicated reg must be popped. The REG_UNUSED note is removed, 2538 since the form of the newly emitted pop insn references the reg, 2539 making it no longer `unset'. */ 2540 2541 note_link = ®_NOTES (insn); 2542 for (note = *note_link; note; note = XEXP (note, 1)) 2543 if (REG_NOTE_KIND (note) == REG_UNUSED && STACK_REG_P (XEXP (note, 0))) 2544 { 2545 *note_link = XEXP (note, 1); 2546 insn = emit_pop_insn (insn, regstack, XEXP (note, 0), EMIT_AFTER); 2547 } 2548 else 2549 note_link = &XEXP (note, 1); 2550 2551 return control_flow_insn_deleted; 2552 } 2553 2554 /* Change the organization of the stack so that it fits a new basic 2556 block. Some registers might have to be popped, but there can never be 2557 a register live in the new block that is not now live. 2558 2559 Insert any needed insns before or after INSN, as indicated by 2560 WHERE. OLD is the original stack layout, and NEW is the desired 2561 form. OLD is updated to reflect the code emitted, i.e., it will be 2562 the same as NEW upon return. 2563 2564 This function will not preserve block_end[]. But that information 2565 is no longer needed once this has executed. */ 2566 2567 static void 2568 change_stack (rtx_insn *insn, stack_ptr old, stack_ptr new_stack, 2569 enum emit_where where) 2570 { 2571 int reg; 2572 machine_mode raw_mode = reg_raw_mode[FIRST_STACK_REG]; 2573 rtx_insn *update_end = NULL; 2574 int i; 2575 2576 /* Stack adjustments for the first insn in a block update the 2577 current_block's stack_in instead of inserting insns directly. 2578 compensate_edges will add the necessary code later. */ 2579 if (current_block 2580 && starting_stack_p 2581 && where == EMIT_BEFORE) 2582 { 2583 BLOCK_INFO (current_block)->stack_in = *new_stack; 2584 starting_stack_p = false; 2585 *old = *new_stack; 2586 return; 2587 } 2588 2589 /* We will be inserting new insns "backwards". If we are to insert 2590 after INSN, find the next insn, and insert before it. */ 2591 2592 if (where == EMIT_AFTER) 2593 { 2594 if (current_block && BB_END (current_block) == insn) 2595 update_end = insn; 2596 insn = NEXT_INSN (insn); 2597 } 2598 2599 /* Initialize partially dead variables. */ 2600 for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++) 2601 if (TEST_HARD_REG_BIT (new_stack->reg_set, i) 2602 && !TEST_HARD_REG_BIT (old->reg_set, i)) 2603 { 2604 old->reg[++old->top] = i; 2605 SET_HARD_REG_BIT (old->reg_set, i); 2606 emit_insn_before (gen_rtx_SET (FP_MODE_REG (i, SFmode), not_a_num), 2607 insn); 2608 } 2609 2610 /* Pop any registers that are not needed in the new block. */ 2611 2612 /* If the destination block's stack already has a specified layout 2613 and contains two or more registers, use a more intelligent algorithm 2614 to pop registers that minimizes the number of fxchs below. */ 2615 if (new_stack->top > 0) 2616 { 2617 bool slots[REG_STACK_SIZE]; 2618 int pops[REG_STACK_SIZE]; 2619 int next, dest, topsrc; 2620 2621 /* First pass to determine the free slots. */ 2622 for (reg = 0; reg <= new_stack->top; reg++) 2623 slots[reg] = TEST_HARD_REG_BIT (new_stack->reg_set, old->reg[reg]); 2624 2625 /* Second pass to allocate preferred slots. */ 2626 topsrc = -1; 2627 for (reg = old->top; reg > new_stack->top; reg--) 2628 if (TEST_HARD_REG_BIT (new_stack->reg_set, old->reg[reg])) 2629 { 2630 dest = -1; 2631 for (next = 0; next <= new_stack->top; next++) 2632 if (!slots[next] && new_stack->reg[next] == old->reg[reg]) 2633 { 2634 /* If this is a preference for the new top of stack, record 2635 the fact by remembering it's old->reg in topsrc. */ 2636 if (next == new_stack->top) 2637 topsrc = reg; 2638 slots[next] = true; 2639 dest = next; 2640 break; 2641 } 2642 pops[reg] = dest; 2643 } 2644 else 2645 pops[reg] = reg; 2646 2647 /* Intentionally, avoid placing the top of stack in it's correct 2648 location, if we still need to permute the stack below and we 2649 can usefully place it somewhere else. This is the case if any 2650 slot is still unallocated, in which case we should place the 2651 top of stack there. */ 2652 if (topsrc != -1) 2653 for (reg = 0; reg < new_stack->top; reg++) 2654 if (!slots[reg]) 2655 { 2656 pops[topsrc] = reg; 2657 slots[new_stack->top] = false; 2658 slots[reg] = true; 2659 break; 2660 } 2661 2662 /* Third pass allocates remaining slots and emits pop insns. */ 2663 next = new_stack->top; 2664 for (reg = old->top; reg > new_stack->top; reg--) 2665 { 2666 dest = pops[reg]; 2667 if (dest == -1) 2668 { 2669 /* Find next free slot. */ 2670 while (slots[next]) 2671 next--; 2672 dest = next--; 2673 } 2674 emit_pop_insn (insn, old, FP_MODE_REG (old->reg[dest], raw_mode), 2675 EMIT_BEFORE); 2676 } 2677 } 2678 else 2679 { 2680 /* The following loop attempts to maximize the number of times we 2681 pop the top of the stack, as this permits the use of the faster 2682 ffreep instruction on platforms that support it. */ 2683 int live, next; 2684 2685 live = 0; 2686 for (reg = 0; reg <= old->top; reg++) 2687 if (TEST_HARD_REG_BIT (new_stack->reg_set, old->reg[reg])) 2688 live++; 2689 2690 next = live; 2691 while (old->top >= live) 2692 if (TEST_HARD_REG_BIT (new_stack->reg_set, old->reg[old->top])) 2693 { 2694 while (TEST_HARD_REG_BIT (new_stack->reg_set, old->reg[next])) 2695 next--; 2696 emit_pop_insn (insn, old, FP_MODE_REG (old->reg[next], raw_mode), 2697 EMIT_BEFORE); 2698 } 2699 else 2700 emit_pop_insn (insn, old, FP_MODE_REG (old->reg[old->top], raw_mode), 2701 EMIT_BEFORE); 2702 } 2703 2704 if (new_stack->top == -2) 2705 { 2706 /* If the new block has never been processed, then it can inherit 2707 the old stack order. */ 2708 2709 new_stack->top = old->top; 2710 memcpy (new_stack->reg, old->reg, sizeof (new_stack->reg)); 2711 } 2712 else 2713 { 2714 /* This block has been entered before, and we must match the 2715 previously selected stack order. */ 2716 2717 /* By now, the only difference should be the order of the stack, 2718 not their depth or liveliness. */ 2719 2720 gcc_assert (old->reg_set == new_stack->reg_set); 2721 gcc_assert (old->top == new_stack->top); 2722 2723 /* If the stack is not empty (new_stack->top != -1), loop here emitting 2724 swaps until the stack is correct. 2725 2726 The worst case number of swaps emitted is N + 2, where N is the 2727 depth of the stack. In some cases, the reg at the top of 2728 stack may be correct, but swapped anyway in order to fix 2729 other regs. But since we never swap any other reg away from 2730 its correct slot, this algorithm will converge. */ 2731 2732 if (new_stack->top != -1) 2733 do 2734 { 2735 /* Swap the reg at top of stack into the position it is 2736 supposed to be in, until the correct top of stack appears. */ 2737 2738 while (old->reg[old->top] != new_stack->reg[new_stack->top]) 2739 { 2740 for (reg = new_stack->top; reg >= 0; reg--) 2741 if (new_stack->reg[reg] == old->reg[old->top]) 2742 break; 2743 2744 gcc_assert (reg != -1); 2745 2746 emit_swap_insn (insn, old, 2747 FP_MODE_REG (old->reg[reg], raw_mode)); 2748 } 2749 2750 /* See if any regs remain incorrect. If so, bring an 2751 incorrect reg to the top of stack, and let the while loop 2752 above fix it. */ 2753 2754 for (reg = new_stack->top; reg >= 0; reg--) 2755 if (new_stack->reg[reg] != old->reg[reg]) 2756 { 2757 emit_swap_insn (insn, old, 2758 FP_MODE_REG (old->reg[reg], raw_mode)); 2759 break; 2760 } 2761 } while (reg >= 0); 2762 2763 /* At this point there must be no differences. */ 2764 2765 for (reg = old->top; reg >= 0; reg--) 2766 gcc_assert (old->reg[reg] == new_stack->reg[reg]); 2767 } 2768 2769 if (update_end) 2770 { 2771 for (update_end = NEXT_INSN (update_end); update_end != insn; 2772 update_end = NEXT_INSN (update_end)) 2773 { 2774 set_block_for_insn (update_end, current_block); 2775 if (INSN_P (update_end)) 2776 df_insn_rescan (update_end); 2777 } 2778 BB_END (current_block) = PREV_INSN (insn); 2779 } 2780 } 2781 2782 /* Print stack configuration. */ 2784 2785 static void 2786 print_stack (FILE *file, stack_ptr s) 2787 { 2788 if (! file) 2789 return; 2790 2791 if (s->top == -2) 2792 fprintf (file, "uninitialized\n"); 2793 else if (s->top == -1) 2794 fprintf (file, "empty\n"); 2795 else 2796 { 2797 int i; 2798 fputs ("[ ", file); 2799 for (i = 0; i <= s->top; ++i) 2800 fprintf (file, "%d ", s->reg[i]); 2801 fputs ("]\n", file); 2802 } 2803 } 2804 2805 /* This function was doing life analysis. We now let the regular live 2807 code do it's job, so we only need to check some extra invariants 2808 that reg-stack expects. Primary among these being that all registers 2809 are initialized before use. 2810 2811 The function returns true when code was emitted to CFG edges and 2812 commit_edge_insertions needs to be called. */ 2813 2814 static int 2815 convert_regs_entry (void) 2816 { 2817 int inserted = 0; 2818 edge e; 2819 edge_iterator ei; 2820 2821 /* Load something into each stack register live at function entry. 2822 Such live registers can be caused by uninitialized variables or 2823 functions not returning values on all paths. In order to keep 2824 the push/pop code happy, and to not scrog the register stack, we 2825 must put something in these registers. Use a QNaN. 2826 2827 Note that we are inserting converted code here. This code is 2828 never seen by the convert_regs pass. */ 2829 2830 FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs) 2831 { 2832 basic_block block = e->dest; 2833 block_info bi = BLOCK_INFO (block); 2834 int reg, top = -1; 2835 2836 for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg) 2837 if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg)) 2838 { 2839 rtx init; 2840 2841 bi->stack_in.reg[++top] = reg; 2842 2843 init = gen_rtx_SET (FP_MODE_REG (FIRST_STACK_REG, SFmode), 2844 not_a_num); 2845 insert_insn_on_edge (init, e); 2846 inserted = 1; 2847 } 2848 2849 bi->stack_in.top = top; 2850 } 2851 2852 return inserted; 2853 } 2854 2855 /* Construct the desired stack for function exit. This will either 2856 be `empty', or the function return value at top-of-stack. */ 2857 2858 static void 2859 convert_regs_exit (void) 2860 { 2861 int value_reg_low, value_reg_high; 2862 stack_ptr output_stack; 2863 rtx retvalue; 2864 2865 retvalue = stack_result (current_function_decl); 2866 value_reg_low = value_reg_high = -1; 2867 if (retvalue) 2868 { 2869 value_reg_low = REGNO (retvalue); 2870 value_reg_high = END_REGNO (retvalue) - 1; 2871 } 2872 2873 output_stack = &BLOCK_INFO (EXIT_BLOCK_PTR_FOR_FN (cfun))->stack_in; 2874 if (value_reg_low == -1) 2875 output_stack->top = -1; 2876 else 2877 { 2878 int reg; 2879 2880 output_stack->top = value_reg_high - value_reg_low; 2881 for (reg = value_reg_low; reg <= value_reg_high; ++reg) 2882 { 2883 output_stack->reg[value_reg_high - reg] = reg; 2884 SET_HARD_REG_BIT (output_stack->reg_set, reg); 2885 } 2886 } 2887 } 2888 2889 /* Copy the stack info from the end of edge E's source block to the 2890 start of E's destination block. */ 2891 2892 static void 2893 propagate_stack (edge e) 2894 { 2895 stack_ptr src_stack = &BLOCK_INFO (e->src)->stack_out; 2896 stack_ptr dest_stack = &BLOCK_INFO (e->dest)->stack_in; 2897 int reg; 2898 2899 /* Preserve the order of the original stack, but check whether 2900 any pops are needed. */ 2901 dest_stack->top = -1; 2902 for (reg = 0; reg <= src_stack->top; ++reg) 2903 if (TEST_HARD_REG_BIT (dest_stack->reg_set, src_stack->reg[reg])) 2904 dest_stack->reg[++dest_stack->top] = src_stack->reg[reg]; 2905 2906 /* Push in any partially dead values. */ 2907 for (reg = FIRST_STACK_REG; reg < LAST_STACK_REG + 1; reg++) 2908 if (TEST_HARD_REG_BIT (dest_stack->reg_set, reg) 2909 && !TEST_HARD_REG_BIT (src_stack->reg_set, reg)) 2910 dest_stack->reg[++dest_stack->top] = reg; 2911 } 2912 2913 2914 /* Adjust the stack of edge E's source block on exit to match the stack 2915 of it's target block upon input. The stack layouts of both blocks 2916 should have been defined by now. */ 2917 2918 static bool 2919 compensate_edge (edge e) 2920 { 2921 basic_block source = e->src, target = e->dest; 2922 stack_ptr target_stack = &BLOCK_INFO (target)->stack_in; 2923 stack_ptr source_stack = &BLOCK_INFO (source)->stack_out; 2924 struct stack_def regstack; 2925 int reg; 2926 2927 if (dump_file) 2928 fprintf (dump_file, "Edge %d->%d: ", source->index, target->index); 2929 2930 gcc_assert (target_stack->top != -2); 2931 2932 /* Check whether stacks are identical. */ 2933 if (target_stack->top == source_stack->top) 2934 { 2935 for (reg = target_stack->top; reg >= 0; --reg) 2936 if (target_stack->reg[reg] != source_stack->reg[reg]) 2937 break; 2938 2939 if (reg == -1) 2940 { 2941 if (dump_file) 2942 fprintf (dump_file, "no changes needed\n"); 2943 return false; 2944 } 2945 } 2946 2947 if (dump_file) 2948 { 2949 fprintf (dump_file, "correcting stack to "); 2950 print_stack (dump_file, target_stack); 2951 } 2952 2953 /* Abnormal calls may appear to have values live in st(0), but the 2954 abnormal return path will not have actually loaded the values. */ 2955 if (e->flags & EDGE_ABNORMAL_CALL) 2956 { 2957 /* Assert that the lifetimes are as we expect -- one value 2958 live at st(0) on the end of the source block, and no 2959 values live at the beginning of the destination block. 2960 For complex return values, we may have st(1) live as well. */ 2961 gcc_assert (source_stack->top == 0 || source_stack->top == 1); 2962 gcc_assert (target_stack->top == -1); 2963 return false; 2964 } 2965 2966 /* Handle non-call EH edges specially. The normal return path have 2967 values in registers. These will be popped en masse by the unwind 2968 library. */ 2969 if (e->flags & EDGE_EH) 2970 { 2971 gcc_assert (target_stack->top == -1); 2972 return false; 2973 } 2974 2975 /* We don't support abnormal edges. Global takes care to 2976 avoid any live register across them, so we should never 2977 have to insert instructions on such edges. */ 2978 gcc_assert (! (e->flags & EDGE_ABNORMAL)); 2979 2980 /* Make a copy of source_stack as change_stack is destructive. */ 2981 regstack = *source_stack; 2982 2983 /* It is better to output directly to the end of the block 2984 instead of to the edge, because emit_swap can do minimal 2985 insn scheduling. We can do this when there is only one 2986 edge out, and it is not abnormal. */ 2987 if (EDGE_COUNT (source->succs) == 1) 2988 { 2989 current_block = source; 2990 change_stack (BB_END (source), ®stack, target_stack, 2991 (JUMP_P (BB_END (source)) ? EMIT_BEFORE : EMIT_AFTER)); 2992 } 2993 else 2994 { 2995 rtx_insn *seq; 2996 rtx_note *after; 2997 2998 current_block = NULL; 2999 start_sequence (); 3000 3001 /* ??? change_stack needs some point to emit insns after. */ 3002 after = emit_note (NOTE_INSN_DELETED); 3003 3004 change_stack (after, ®stack, target_stack, EMIT_BEFORE); 3005 3006 seq = get_insns (); 3007 end_sequence (); 3008 3009 set_insn_locations (seq, e->goto_locus); 3010 insert_insn_on_edge (seq, e); 3011 return true; 3012 } 3013 return false; 3014 } 3015 3016 /* Traverse all non-entry edges in the CFG, and emit the necessary 3017 edge compensation code to change the stack from stack_out of the 3018 source block to the stack_in of the destination block. */ 3019 3020 static bool 3021 compensate_edges (void) 3022 { 3023 bool inserted = false; 3024 basic_block bb; 3025 3026 starting_stack_p = false; 3027 3028 FOR_EACH_BB_FN (bb, cfun) 3029 if (bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)) 3030 { 3031 edge e; 3032 edge_iterator ei; 3033 3034 FOR_EACH_EDGE (e, ei, bb->succs) 3035 inserted |= compensate_edge (e); 3036 } 3037 return inserted; 3038 } 3039 3040 /* Select the better of two edges E1 and E2 to use to determine the 3041 stack layout for their shared destination basic block. This is 3042 typically the more frequently executed. The edge E1 may be NULL 3043 (in which case E2 is returned), but E2 is always non-NULL. */ 3044 3045 static edge 3046 better_edge (edge e1, edge e2) 3047 { 3048 if (!e1) 3049 return e2; 3050 3051 if (e1->count () > e2->count ()) 3052 return e1; 3053 if (e1->count () < e2->count ()) 3054 return e2; 3055 3056 /* Prefer critical edges to minimize inserting compensation code on 3057 critical edges. */ 3058 3059 if (EDGE_CRITICAL_P (e1) != EDGE_CRITICAL_P (e2)) 3060 return EDGE_CRITICAL_P (e1) ? e1 : e2; 3061 3062 /* Avoid non-deterministic behavior. */ 3063 return (e1->src->index < e2->src->index) ? e1 : e2; 3064 } 3065 3066 /* Convert stack register references in one block. Return true if the CFG 3067 has been modified in the process. */ 3068 3069 static bool 3070 convert_regs_1 (basic_block block) 3071 { 3072 struct stack_def regstack; 3073 block_info bi = BLOCK_INFO (block); 3074 int reg; 3075 rtx_insn *insn, *next; 3076 bool control_flow_insn_deleted = false; 3077 bool cfg_altered = false; 3078 int debug_insns_with_starting_stack = 0; 3079 3080 /* Choose an initial stack layout, if one hasn't already been chosen. */ 3081 if (bi->stack_in.top == -2) 3082 { 3083 edge e, beste = NULL; 3084 edge_iterator ei; 3085 3086 /* Select the best incoming edge (typically the most frequent) to 3087 use as a template for this basic block. */ 3088 FOR_EACH_EDGE (e, ei, block->preds) 3089 if (BLOCK_INFO (e->src)->done) 3090 beste = better_edge (beste, e); 3091 3092 if (beste) 3093 propagate_stack (beste); 3094 else 3095 { 3096 /* No predecessors. Create an arbitrary input stack. */ 3097 bi->stack_in.top = -1; 3098 for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg) 3099 if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg)) 3100 bi->stack_in.reg[++bi->stack_in.top] = reg; 3101 } 3102 } 3103 3104 if (dump_file) 3105 { 3106 fprintf (dump_file, "\nBasic block %d\nInput stack: ", block->index); 3107 print_stack (dump_file, &bi->stack_in); 3108 } 3109 3110 /* Process all insns in this block. Keep track of NEXT so that we 3111 don't process insns emitted while substituting in INSN. */ 3112 current_block = block; 3113 next = BB_HEAD (block); 3114 regstack = bi->stack_in; 3115 starting_stack_p = true; 3116 3117 do 3118 { 3119 insn = next; 3120 next = NEXT_INSN (insn); 3121 3122 /* Ensure we have not missed a block boundary. */ 3123 gcc_assert (next); 3124 if (insn == BB_END (block)) 3125 next = NULL; 3126 3127 /* Don't bother processing unless there is a stack reg 3128 mentioned or if it's a CALL_INSN. */ 3129 if (DEBUG_BIND_INSN_P (insn)) 3130 { 3131 if (starting_stack_p) 3132 debug_insns_with_starting_stack++; 3133 else 3134 { 3135 subst_all_stack_regs_in_debug_insn (insn, ®stack); 3136 3137 /* Nothing must ever die at a debug insn. If something 3138 is referenced in it that becomes dead, it should have 3139 died before and the reference in the debug insn 3140 should have been removed so as to avoid changing code 3141 generation. */ 3142 gcc_assert (!find_reg_note (insn, REG_DEAD, NULL)); 3143 } 3144 } 3145 else if (stack_regs_mentioned (insn) 3146 || CALL_P (insn)) 3147 { 3148 if (dump_file) 3149 { 3150 fprintf (dump_file, " insn %d input stack: ", 3151 INSN_UID (insn)); 3152 print_stack (dump_file, ®stack); 3153 } 3154 control_flow_insn_deleted |= subst_stack_regs (insn, ®stack); 3155 starting_stack_p = false; 3156 } 3157 } 3158 while (next); 3159 3160 if (debug_insns_with_starting_stack) 3161 { 3162 /* Since it's the first non-debug instruction that determines 3163 the stack requirements of the current basic block, we refrain 3164 from updating debug insns before it in the loop above, and 3165 fix them up here. */ 3166 for (insn = BB_HEAD (block); debug_insns_with_starting_stack; 3167 insn = NEXT_INSN (insn)) 3168 { 3169 if (!DEBUG_BIND_INSN_P (insn)) 3170 continue; 3171 3172 debug_insns_with_starting_stack--; 3173 subst_all_stack_regs_in_debug_insn (insn, &bi->stack_in); 3174 } 3175 } 3176 3177 if (dump_file) 3178 { 3179 fprintf (dump_file, "Expected live registers ["); 3180 for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; ++reg) 3181 if (TEST_HARD_REG_BIT (bi->out_reg_set, reg)) 3182 fprintf (dump_file, " %d", reg); 3183 fprintf (dump_file, " ]\nOutput stack: "); 3184 print_stack (dump_file, ®stack); 3185 } 3186 3187 insn = BB_END (block); 3188 if (JUMP_P (insn)) 3189 insn = PREV_INSN (insn); 3190 3191 /* If the function is declared to return a value, but it returns one 3192 in only some cases, some registers might come live here. Emit 3193 necessary moves for them. */ 3194 3195 for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; ++reg) 3196 { 3197 if (TEST_HARD_REG_BIT (bi->out_reg_set, reg) 3198 && ! TEST_HARD_REG_BIT (regstack.reg_set, reg)) 3199 { 3200 rtx set; 3201 3202 if (dump_file) 3203 fprintf (dump_file, "Emitting insn initializing reg %d\n", reg); 3204 3205 set = gen_rtx_SET (FP_MODE_REG (reg, SFmode), not_a_num); 3206 insn = emit_insn_after (set, insn); 3207 control_flow_insn_deleted |= subst_stack_regs (insn, ®stack); 3208 } 3209 } 3210 3211 /* Amongst the insns possibly deleted during the substitution process above, 3212 might have been the only trapping insn in the block. We purge the now 3213 possibly dead EH edges here to avoid an ICE from fixup_abnormal_edges, 3214 called at the end of convert_regs. The order in which we process the 3215 blocks ensures that we never delete an already processed edge. 3216 3217 Note that, at this point, the CFG may have been damaged by the emission 3218 of instructions after an abnormal call, which moves the basic block end 3219 (and is the reason why we call fixup_abnormal_edges later). So we must 3220 be sure that the trapping insn has been deleted before trying to purge 3221 dead edges, otherwise we risk purging valid edges. 3222 3223 ??? We are normally supposed not to delete trapping insns, so we pretend 3224 that the insns deleted above don't actually trap. It would have been 3225 better to detect this earlier and avoid creating the EH edge in the first 3226 place, still, but we don't have enough information at that time. */ 3227 3228 if (control_flow_insn_deleted) 3229 cfg_altered |= purge_dead_edges (block); 3230 3231 /* Something failed if the stack lives don't match. If we had malformed 3232 asms, we zapped the instruction itself, but that didn't produce the 3233 same pattern of register kills as before. */ 3234 3235 gcc_assert (regstack.reg_set == bi->out_reg_set || any_malformed_asm); 3236 bi->stack_out = regstack; 3237 bi->done = true; 3238 3239 return cfg_altered; 3240 } 3241 3242 /* Convert registers in all blocks reachable from BLOCK. Return true if the 3243 CFG has been modified in the process. */ 3244 3245 static bool 3246 convert_regs_2 (basic_block block) 3247 { 3248 basic_block *stack, *sp; 3249 bool cfg_altered = false; 3250 3251 /* We process the blocks in a top-down manner, in a way such that one block 3252 is only processed after all its predecessors. The number of predecessors 3253 of every block has already been computed. */ 3254 3255 stack = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun)); 3256 sp = stack; 3257 3258 *sp++ = block; 3259 3260 do 3261 { 3262 edge e; 3263 edge_iterator ei; 3264 3265 block = *--sp; 3266 3267 /* Processing BLOCK is achieved by convert_regs_1, which may purge 3268 some dead EH outgoing edge after the deletion of the trapping 3269 insn inside the block. Since the number of predecessors of 3270 BLOCK's successors was computed based on the initial edge set, 3271 we check the necessity to process some of these successors 3272 before such an edge deletion may happen. However, there is 3273 a pitfall: if BLOCK is the only predecessor of a successor and 3274 the edge between them happens to be deleted, the successor 3275 becomes unreachable and should not be processed. The problem 3276 is that there is no way to preventively detect this case so we 3277 stack the successor in all cases and hand over the task of 3278 fixing up the discrepancy to convert_regs_1. */ 3279 3280 FOR_EACH_EDGE (e, ei, block->succs) 3281 if (! (e->flags & EDGE_DFS_BACK)) 3282 { 3283 BLOCK_INFO (e->dest)->predecessors--; 3284 if (!BLOCK_INFO (e->dest)->predecessors) 3285 *sp++ = e->dest; 3286 } 3287 3288 cfg_altered |= convert_regs_1 (block); 3289 } 3290 while (sp != stack); 3291 3292 free (stack); 3293 3294 return cfg_altered; 3295 } 3296 3297 /* Traverse all basic blocks in a function, converting the register 3298 references in each insn from the "flat" register file that gcc uses, 3299 to the stack-like registers the 387 uses. */ 3300 3301 static void 3302 convert_regs (void) 3303 { 3304 bool cfg_altered = false; 3305 int inserted; 3306 basic_block b; 3307 edge e; 3308 edge_iterator ei; 3309 3310 /* Initialize uninitialized registers on function entry. */ 3311 inserted = convert_regs_entry (); 3312 3313 /* Construct the desired stack for function exit. */ 3314 convert_regs_exit (); 3315 BLOCK_INFO (EXIT_BLOCK_PTR_FOR_FN (cfun))->done = 1; 3316 3317 /* ??? Future: process inner loops first, and give them arbitrary 3318 initial stacks which emit_swap_insn can modify. This ought to 3319 prevent double fxch that often appears at the head of a loop. */ 3320 3321 /* Process all blocks reachable from all entry points. */ 3322 FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs) 3323 cfg_altered |= convert_regs_2 (e->dest); 3324 3325 /* ??? Process all unreachable blocks. Though there's no excuse 3326 for keeping these even when not optimizing. */ 3327 FOR_EACH_BB_FN (b, cfun) 3328 { 3329 block_info bi = BLOCK_INFO (b); 3330 3331 if (! bi->done) 3332 cfg_altered |= convert_regs_2 (b); 3333 } 3334 3335 /* We must fix up abnormal edges before inserting compensation code 3336 because both mechanisms insert insns on edges. */ 3337 inserted |= fixup_abnormal_edges (); 3338 3339 inserted |= compensate_edges (); 3340 3341 clear_aux_for_blocks (); 3342 3343 if (inserted) 3344 commit_edge_insertions (); 3345 3346 if (cfg_altered) 3347 cleanup_cfg (0); 3348 3349 if (dump_file) 3350 fputc ('\n', dump_file); 3351 } 3352 3353 /* Convert register usage from "flat" register file usage to a "stack 3355 register file. FILE is the dump file, if used. 3356 3357 Construct a CFG and run life analysis. Then convert each insn one 3358 by one. Run a last cleanup_cfg pass, if optimizing, to eliminate 3359 code duplication created when the converter inserts pop insns on 3360 the edges. */ 3361 3362 static bool 3363 reg_to_stack (void) 3364 { 3365 basic_block bb; 3366 int i; 3367 int max_uid; 3368 3369 /* Clean up previous run. */ 3370 stack_regs_mentioned_data.release (); 3371 3372 /* See if there is something to do. Flow analysis is quite 3373 expensive so we might save some compilation time. */ 3374 for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++) 3375 if (df_regs_ever_live_p (i)) 3376 break; 3377 if (i > LAST_STACK_REG) 3378 return false; 3379 3380 df_note_add_problem (); 3381 df_analyze (); 3382 3383 mark_dfs_back_edges (); 3384 3385 /* Set up block info for each basic block. */ 3386 alloc_aux_for_blocks (sizeof (struct block_info_def)); 3387 FOR_EACH_BB_FN (bb, cfun) 3388 { 3389 block_info bi = BLOCK_INFO (bb); 3390 edge_iterator ei; 3391 edge e; 3392 int reg; 3393 3394 FOR_EACH_EDGE (e, ei, bb->preds) 3395 if (!(e->flags & EDGE_DFS_BACK) 3396 && e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)) 3397 bi->predecessors++; 3398 3399 /* Set current register status at last instruction `uninitialized'. */ 3400 bi->stack_in.top = -2; 3401 3402 /* Copy live_at_end and live_at_start into temporaries. */ 3403 for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; reg++) 3404 { 3405 if (REGNO_REG_SET_P (DF_LR_OUT (bb), reg)) 3406 SET_HARD_REG_BIT (bi->out_reg_set, reg); 3407 if (REGNO_REG_SET_P (DF_LR_IN (bb), reg)) 3408 SET_HARD_REG_BIT (bi->stack_in.reg_set, reg); 3409 } 3410 } 3411 3412 /* Create the replacement registers up front. */ 3413 for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++) 3414 { 3415 machine_mode mode; 3416 FOR_EACH_MODE_IN_CLASS (mode, MODE_FLOAT) 3417 FP_MODE_REG (i, mode) = gen_rtx_REG (mode, i); 3418 FOR_EACH_MODE_IN_CLASS (mode, MODE_COMPLEX_FLOAT) 3419 FP_MODE_REG (i, mode) = gen_rtx_REG (mode, i); 3420 } 3421 3422 ix86_flags_rtx = gen_rtx_REG (CCmode, FLAGS_REG); 3423 3424 /* A QNaN for initializing uninitialized variables. 3425 3426 ??? We can't load from constant memory in PIC mode, because 3427 we're inserting these instructions before the prologue and 3428 the PIC register hasn't been set up. In that case, fall back 3429 on zero, which we can get from `fldz'. */ 3430 3431 if ((flag_pic && !TARGET_64BIT) 3432 || ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) 3433 not_a_num = CONST0_RTX (SFmode); 3434 else 3435 { 3436 REAL_VALUE_TYPE r; 3437 3438 real_nan (&r, "", 1, SFmode); 3439 not_a_num = const_double_from_real_value (r, SFmode); 3440 not_a_num = force_const_mem (SFmode, not_a_num); 3441 } 3442 3443 /* Allocate a cache for stack_regs_mentioned. */ 3444 max_uid = get_max_uid (); 3445 stack_regs_mentioned_data.create (max_uid + 1); 3446 memset (stack_regs_mentioned_data.address (), 3447 0, sizeof (char) * (max_uid + 1)); 3448 3449 convert_regs (); 3450 any_malformed_asm = false; 3451 3452 free_aux_for_blocks (); 3453 return true; 3454 } 3455 #endif /* STACK_REGS */ 3456 3457 namespace { 3459 3460 const pass_data pass_data_stack_regs = 3461 { 3462 RTL_PASS, /* type */ 3463 "*stack_regs", /* name */ 3464 OPTGROUP_NONE, /* optinfo_flags */ 3465 TV_REG_STACK, /* tv_id */ 3466 0, /* properties_required */ 3467 0, /* properties_provided */ 3468 0, /* properties_destroyed */ 3469 0, /* todo_flags_start */ 3470 0, /* todo_flags_finish */ 3471 }; 3472 3473 class pass_stack_regs : public rtl_opt_pass 3474 { 3475 public: 3476 pass_stack_regs (gcc::context *ctxt) 3477 : rtl_opt_pass (pass_data_stack_regs, ctxt) 3478 {} 3479 3480 /* opt_pass methods: */ 3481 virtual bool gate (function *) 3482 { 3483 #ifdef STACK_REGS 3484 return true; 3485 #else 3486 return false; 3487 #endif 3488 } 3489 3490 }; // class pass_stack_regs 3491 3492 } // anon namespace 3493 3494 rtl_opt_pass * 3495 make_pass_stack_regs (gcc::context *ctxt) 3496 { 3497 return new pass_stack_regs (ctxt); 3498 } 3499 3500 /* Convert register usage from flat register file usage to a stack 3501 register file. */ 3502 static unsigned int 3503 rest_of_handle_stack_regs (void) 3504 { 3505 #ifdef STACK_REGS 3506 if (reg_to_stack ()) 3507 df_insn_rescan_all (); 3508 regstack_completed = 1; 3509 #endif 3510 return 0; 3511 } 3512 3513 namespace { 3514 3515 const pass_data pass_data_stack_regs_run = 3516 { 3517 RTL_PASS, /* type */ 3518 "stack", /* name */ 3519 OPTGROUP_NONE, /* optinfo_flags */ 3520 TV_REG_STACK, /* tv_id */ 3521 0, /* properties_required */ 3522 0, /* properties_provided */ 3523 0, /* properties_destroyed */ 3524 0, /* todo_flags_start */ 3525 TODO_df_finish, /* todo_flags_finish */ 3526 }; 3527 3528 class pass_stack_regs_run : public rtl_opt_pass 3529 { 3530 public: 3531 pass_stack_regs_run (gcc::context *ctxt) 3532 : rtl_opt_pass (pass_data_stack_regs_run, ctxt) 3533 {} 3534 3535 /* opt_pass methods: */ 3536 virtual unsigned int execute (function *) 3537 { 3538 return rest_of_handle_stack_regs (); 3539 } 3540 3541 }; // class pass_stack_regs_run 3542 3543 } // anon namespace 3544 3545 rtl_opt_pass * 3546 make_pass_stack_regs_run (gcc::context *ctxt) 3547 { 3548 return new pass_stack_regs_run (ctxt); 3549 } 3550