Fix handling of very long asm statements in inliner
commit5a5c1f812b36f728ab676db6b45242e1fc28e9a6
authorak <ak@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Sep 2013 23:41:38 +0000 (8 23:41 +0000)
committerak <ak@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Sep 2013 23:41:38 +0000 (8 23:41 +0000)
tree8ffb6df62f9e66b086cef2af05cda842981860ed
parent786f817740a7dca966e5f49b0b4976b32d0be744
Fix handling of very long asm statements in inliner

An auto generated program with a 6.4mio line asm statement gave
with 4.7 and 4.8:

xxx.c:6400017:1: internal compiler error: in account_size_time, at
ipa-inline-analysis.c:601

The problem is that the inliner counts the number of lines in the asm
statement and multiplies that with a weight. With the weight this
overflows 32bit signed int, and triggers an assert for negative time.

Fix this by limiting the number of lines to 1000 for asm cost
estimation. The RTL backend also does similar multiplications for
jump shortening. I haven't tried to address this, but presumably
it's less likely to result in a failure.

gcc/:
2013-09-08  Andi Kleen  <ak@linux.intel.com>

* tree-inline.c (estimate_num_insns): Limit asm cost to 1000.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202374 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/tree-inline.c