From mattias.jansson@REDACTED Wed Nov 25 14:25:20 2015 From: mattias.jansson@REDACTED (Mattias Jansson) Date: Wed, 25 Nov 2015 13:25:20 +0000 Subject: [erlang-bugs] HiPe compiler FP inlining crashing Message-ID: <16231087-2669-4D41-A77E-5836FFE3A1C2@erlang-solutions.com> Hello. I am having a problem with a crashing HiPe compiler. It has been tested on Erlang OTP 18.1 (64-bit) on OSX 10.11.1, and also on Fedora Linux 22 with OTP versions 18.0 and 17.5 (64-bit). It crashes on Linux as well as OSX, but it does not crash in OTP 17.5. This has only been seen in 18.* The following code has been shrunk to remain syntactically correct and still show the error when compiling (you?d be surprised by how much of this code is actually necessary to reproduce this). -module(rat_calc). -export([eat/0]). eat() -> eat_what(1.0, #{}). eat_what(Factor, #{rat_type := LT} = Rat) -> #{ cheese := Cheese } = Rat, UnitCheese = Cheese / 2, RetA = case eat() of {full, RetA1} -> CheeseB2 = min(RetA1, UnitCheese) * Factor, case eat() of full -> {win, RetA1}; hungry -> {partial, RetA1 - CheeseB2} end; AOther -> AOther end, RetB = case eat() of {full, RetB1} -> CheeseA2 = min(RetB1, UnitCheese) * Factor, rat:init(single, LT, CheeseA2), case eat() of full -> {full, RetB1}; hungry -> {hungry, RetB1 - CheeseA2} end end, {RetA, RetB}. The code compiles without problem if running the compiler without the +native flag. With the flag, the compiler will crash. If compiling with the no_inline_fp flag enabled, the compiler does not crash. Thanks. // Mattias Jansson From mikpelinux@REDACTED Wed Nov 25 20:46:40 2015 From: mikpelinux@REDACTED (Mikael Pettersson) Date: Wed, 25 Nov 2015 20:46:40 +0100 Subject: [erlang-bugs] HiPe compiler FP inlining crashing In-Reply-To: <16231087-2669-4D41-A77E-5836FFE3A1C2@erlang-solutions.com> References: <16231087-2669-4D41-A77E-5836FFE3A1C2@erlang-solutions.com> Message-ID: <22102.4128.417768.278134@gargle.gargle.HOWL> Mattias Jansson writes: > Hello. > > I am having a problem with a crashing HiPe compiler. Note, it's "HiPE" not "HiPe". > > It has been tested on Erlang OTP 18.1 (64-bit) on OSX 10.11.1, and also on Fedora Linux 22 with OTP versions 18.0 and 17.5 (64-bit). > It crashes on Linux as well as OSX, but it does not crash in OTP 17.5. This has only been seen in 18.* > > The following code has been shrunk to remain syntactically correct and still show the error when compiling > (you?d be surprised by how much of this code is actually necessary to reproduce this). > > > -module(rat_calc). > > -export([eat/0]). > > eat() -> > eat_what(1.0, #{}). > > eat_what(Factor, #{rat_type := LT} = Rat) -> > #{ cheese := Cheese } = Rat, > UnitCheese = Cheese / 2, > RetA = case eat() of > {full, RetA1} -> > CheeseB2 = min(RetA1, UnitCheese) * Factor, > case eat() of > full -> > {win, RetA1}; > hungry -> > {partial, RetA1 - CheeseB2} > end; > AOther -> > AOther > end, > RetB = case eat() of > {full, RetB1} -> > CheeseA2 = min(RetB1, UnitCheese) * Factor, > rat:init(single, LT, CheeseA2), > case eat() of > full -> > {full, RetB1}; > hungry -> > {hungry, RetB1 - CheeseA2} > end > end, > {RetA, RetB}. > > > The code compiles without problem if running the compiler without the +native flag. With the flag, the compiler will crash. > If compiling with the no_inline_fp flag enabled, the compiler does not crash. I can reproduce the compiler crash with OTP 18.1 on Linux/x86_64, but not with OTP 17.5. The crash is in a sanity check (hipe_icode_fp:assert_assigned/1) at the ICode level, well before any target-dependent code is generated. This could be caused by changes in the BEAM compiler's output, or by some change in HiPE. Presumably a git bisect ought to identify it; care to try that? /Mikael From kostis@REDACTED Wed Nov 25 22:20:46 2015 From: kostis@REDACTED (Kostis Sagonas) Date: Wed, 25 Nov 2015 22:20:46 +0100 Subject: [erlang-bugs] HiPe compiler FP inlining crashing In-Reply-To: <22102.4128.417768.278134@gargle.gargle.HOWL> References: <16231087-2669-4D41-A77E-5836FFE3A1C2@erlang-solutions.com> <22102.4128.417768.278134@gargle.gargle.HOWL> Message-ID: <5656262E.4060309@cs.ntua.gr> On 11/25/2015 08:46 PM, Mikael Pettersson wrote: > > The code compiles without problem if running the compiler without the +native flag. With the flag, the compiler will crash. > > If compiling with the no_inline_fp flag enabled, the compiler does not crash. > > I can reproduce the compiler crash with OTP 18.1 on Linux/x86_64, but not with OTP 17.5. > The crash is in a sanity check (hipe_icode_fp:assert_assigned/1) at the ICode level, well > before any target-dependent code is generated. > > This could be caused by changes in the BEAM compiler's output, or by some change in HiPE. > Presumably a git bisect ought to identify it; care to try that? I've also looked at this one this afternoon. I am willing to bet this is related to the presence of maps in the code -- most likely due to their "better" compilation by BEAM in 18.x. Given that the code that propagates floating point values in ICode was written back in 2003 or so and practically not much changed since then, it's not surprising that this code breaks as new types and instructions are introduced to the BEAM compiler. I'll try to find some time to look into this, but would not mind if somebody else beats me to it. Kostis From wallentin.dahlberg@REDACTED Wed Nov 25 23:08:16 2015 From: wallentin.dahlberg@REDACTED (=?UTF-8?Q?Bj=C3=B6rn=2DEgil_Dahlberg?=) Date: Wed, 25 Nov 2015 23:08:16 +0100 Subject: [erlang-bugs] HiPe compiler FP inlining crashing In-Reply-To: <5656262E.4060309@cs.ntua.gr> References: <16231087-2669-4D41-A77E-5836FFE3A1C2@erlang-solutions.com> <22102.4128.417768.278134@gargle.gargle.HOWL> <5656262E.4060309@cs.ntua.gr> Message-ID: snarky .. Before anyone goes on a wild-goose chase, there exists another sample code, without maps, that also crashes the HiPE compiler on, - 18.1 - 17.5.6 - OTP_R16B03-1 - OTP_R15B03-1 - stopped testing here .. perhaps the bug is in the original implementation .. f(A, C, D, E, L) -> lists:foldl(fun (X, P) -> AVar = case A of 0 -> 1 / D; N -> N / C end, BVar = case E of atom1 -> 1.0; atom2 -> 0.8; _ -> E end, CVar = case X of atom1 -> 0.1 * AVar; _ -> 1.0 end, P * BVar * CVar end, 1, L). Not necessarily the same bug as above but it has the same symptoms, i.e. function clause on hipe_icode_fp assert_assigned and no_inline_fp compiles fine. 2015-11-25 22:20 GMT+01:00 Kostis Sagonas : > On 11/25/2015 08:46 PM, Mikael Pettersson wrote: > >> > The code compiles without problem if running the compiler without the >> +native flag. With the flag, the compiler will crash. >> > If compiling with the no_inline_fp flag enabled, the compiler does >> not crash. >> >> I can reproduce the compiler crash with OTP 18.1 on Linux/x86_64, but not >> with OTP 17.5. >> The crash is in a sanity check (hipe_icode_fp:assert_assigned/1) at the >> ICode level, well >> before any target-dependent code is generated. >> >> This could be caused by changes in the BEAM compiler's output, or by some >> change in HiPE. >> Presumably a git bisect ought to identify it; care to try that? >> > > I've also looked at this one this afternoon. I am willing to bet this is > related to the presence of maps in the code -- most likely due to their > "better" compilation by BEAM in 18.x. > > Given that the code that propagates floating point values in ICode was > written back in 2003 or so and practically not much changed since then, > it's not surprising that this code breaks as new types and instructions are > introduced to the BEAM compiler. > > I'll try to find some time to look into this, but would not mind if > somebody else beats me to it. > > Kostis > > > > _______________________________________________ > erlang-bugs mailing list > erlang-bugs@REDACTED > http://erlang.org/mailman/listinfo/erlang-bugs > -------------- next part -------------- An HTML attachment was scrubbed... URL: