Mercurial > hg > truffle
comparison src/cpu/sparc/vm/sparc.ad @ 2254:ab42c7e1cf83
7017746: Regression : C2 compiler crash due to SIGSEGV in PhaseCFG::schedule_early()
Summary: Add TEMP edges (and KILL projections) before duplicated operands are removed in Expand() methods.
Reviewed-by: never
author | kvn |
---|---|
date | Thu, 10 Feb 2011 14:25:59 -0800 |
parents | c17b998c5926 |
children | 7e88bdae86ec |
comparison
equal
deleted
inserted
replaced
2253:62a8557e8f36 | 2254:ab42c7e1cf83 |
---|---|
8123 ins_encode( form3_g0_rs2_rd_move( src, dst ), enc_convP2B( dst, src ) ); | 8123 ins_encode( form3_g0_rs2_rd_move( src, dst ), enc_convP2B( dst, src ) ); |
8124 ins_pipe(ialu_clr_and_mover); | 8124 ins_pipe(ialu_clr_and_mover); |
8125 %} | 8125 %} |
8126 #endif | 8126 #endif |
8127 | 8127 |
8128 instruct cmpLTMask0( iRegI dst, iRegI src, immI0 zero, flagsReg ccr ) %{ | |
8129 match(Set dst (CmpLTMask src zero)); | |
8130 effect(KILL ccr); | |
8131 size(4); | |
8132 format %{ "SRA $src,#31,$dst\t# cmpLTMask0" %} | |
8133 ins_encode %{ | |
8134 __ sra($src$$Register, 31, $dst$$Register); | |
8135 %} | |
8136 ins_pipe(ialu_reg_imm); | |
8137 %} | |
8138 | |
8128 instruct cmpLTMask_reg_reg( iRegI dst, iRegI p, iRegI q, flagsReg ccr ) %{ | 8139 instruct cmpLTMask_reg_reg( iRegI dst, iRegI p, iRegI q, flagsReg ccr ) %{ |
8129 match(Set dst (CmpLTMask p q)); | 8140 match(Set dst (CmpLTMask p q)); |
8130 effect( KILL ccr ); | 8141 effect( KILL ccr ); |
8131 ins_cost(DEFAULT_COST*4); | 8142 ins_cost(DEFAULT_COST*4); |
8132 format %{ "CMP $p,$q\n\t" | 8143 format %{ "CMP $p,$q\n\t" |
8142 effect(KILL ccr, TEMP tmp); | 8153 effect(KILL ccr, TEMP tmp); |
8143 ins_cost(DEFAULT_COST*3); | 8154 ins_cost(DEFAULT_COST*3); |
8144 | 8155 |
8145 format %{ "SUBcc $p,$q,$p\t! p' = p-q\n\t" | 8156 format %{ "SUBcc $p,$q,$p\t! p' = p-q\n\t" |
8146 "ADD $p,$y,$tmp\t! g3=p-q+y\n\t" | 8157 "ADD $p,$y,$tmp\t! g3=p-q+y\n\t" |
8147 "MOVl $tmp,$p\t! p' < 0 ? p'+y : p'" %} | 8158 "MOVlt $tmp,$p\t! p' < 0 ? p'+y : p'" %} |
8148 ins_encode( enc_cadd_cmpLTMask(p, q, y, tmp) ); | |
8149 ins_pipe( cadd_cmpltmask ); | |
8150 %} | |
8151 | |
8152 instruct cadd_cmpLTMask2( iRegI p, iRegI q, iRegI y, iRegI tmp, flagsReg ccr ) %{ | |
8153 match(Set p (AddI (SubI p q) (AndI (CmpLTMask p q) y))); | |
8154 effect( KILL ccr, TEMP tmp); | |
8155 ins_cost(DEFAULT_COST*3); | |
8156 | |
8157 format %{ "SUBcc $p,$q,$p\t! p' = p-q\n\t" | |
8158 "ADD $p,$y,$tmp\t! g3=p-q+y\n\t" | |
8159 "MOVl $tmp,$p\t! p' < 0 ? p'+y : p'" %} | |
8160 ins_encode( enc_cadd_cmpLTMask(p, q, y, tmp) ); | 8159 ins_encode( enc_cadd_cmpLTMask(p, q, y, tmp) ); |
8161 ins_pipe( cadd_cmpltmask ); | 8160 ins_pipe( cadd_cmpltmask ); |
8162 %} | 8161 %} |
8163 | 8162 |
8164 //----------Arithmetic Conversion Instructions--------------------------------- | 8163 //----------Arithmetic Conversion Instructions--------------------------------- |