Bug in HiPE on x86-64?
Mikael Pettersson
mikpe@REDACTED
Tue Jun 20 17:52:31 CEST 2006
Stefan Axelsson L \(LN/EAB\) writes:
> Hi, I'm seeing different behaviour depending on whether a module is
> compiled with HiPE and without, when I make a call with a function
> argument. It works when I wrap the function in an anonymous function
> though. Is this a feature or a bug? I've read the documentation and
> while there are a few differences noted, nothing really jumps out at me
> that would explain this (I'm a relative newbie to Erlang, so that's not
> to say isn't in there of course).
>
> Below are a few test cases that provoke the deviation. In the first case
> the evaluation succeeds and in the second I get an error message.
> Removing the -smp switch makes no difference. As mentioned, invoking the
> test as: "merge_sort:test_sort(1000000, 1, fun(N,Xs)->
> merge_sort:merge_sort(N,Xs) end)/1000000." works, i.e. Produces the
> expected results.
>
> This is on an AMD Opteron x86-64. The code and details are included
> below.
...
> sax@REDACTED:~/Erlang> erl -smp
> Erlang (BEAM) emulator version 5.5 [source] [64-bit] [smp:2]
> [async-threads:0] [hipe]
>
> Eshell V5.5 (abort with ^G)
> 1> c(merge_sort,native).
> {ok,merge_sort}
> 2> merge_sort:test_sort(1000000, 1, fun
> merge_sort:merge_sort/2)/1000000.
> ** exited: {{badfun,#Fun<merge_sort.merge_sort.2>},[]} **
> 3>
> =ERROR REPORT==== 20-Jun-2006::11:10:20 ===
> Error in process <0.32.0> with exit value:
> {{badfun,#Fun<merge_sort.merge_sort.2>},[]}
I've reproduced this problem on 32-bit PowerPC. It's not dependent on
architecture or word size; instead, the issue appears to be that these
pseudo-closures (values of fun M:F/A expressions) aren't recognized by
HiPE-generated code as function values.
Thanks for reporting this. We'll look into it.
/Mikael
More information about the erlang-questions
mailing list