re PR target/43305 (ICE: in emit_unop_insn, at optabs.c:3838 with -Os -ffast-math and ilogbl())
PR 43305 * builtins.c (expand_builtin_interclass_mathfn, expand_builtin_signbit): Use maybe_emit_unop_insn, emit libcalls if that fails. testsuite/ * gcc.dg/pr43305.c: New testcase. From-SVN: r157567
This commit is contained in:
parent
afcd05a759
commit
8a0b1aa4c1
@ -1,3 +1,10 @@
|
||||
2010-03-19 Michael Matz <matz@suse.de>
|
||||
|
||||
PR target/43305
|
||||
* builtins.c (expand_builtin_interclass_mathfn,
|
||||
expand_builtin_signbit): Use maybe_emit_unop_insn, emit libcalls
|
||||
if that fails.
|
||||
|
||||
2010-03-19 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/43415
|
||||
|
@ -2312,6 +2312,8 @@ expand_builtin_interclass_mathfn (tree exp, rtx target, rtx subtarget)
|
||||
|
||||
if (icode != CODE_FOR_nothing)
|
||||
{
|
||||
rtx last = get_last_insn ();
|
||||
tree orig_arg = arg;
|
||||
/* Make a suitable register to place result in. */
|
||||
if (!target
|
||||
|| GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
|
||||
@ -2332,8 +2334,10 @@ expand_builtin_interclass_mathfn (tree exp, rtx target, rtx subtarget)
|
||||
|
||||
/* Compute into TARGET.
|
||||
Set TARGET to wherever the result comes back. */
|
||||
emit_unop_insn (icode, target, op0, UNKNOWN);
|
||||
return target;
|
||||
if (maybe_emit_unop_insn (icode, target, op0, UNKNOWN))
|
||||
return target;
|
||||
delete_insns_since (last);
|
||||
CALL_EXPR_ARG (exp, 0) = orig_arg;
|
||||
}
|
||||
|
||||
return NULL_RTX;
|
||||
@ -5197,9 +5201,11 @@ expand_builtin_signbit (tree exp, rtx target)
|
||||
icode = signbit_optab->handlers [(int) fmode].insn_code;
|
||||
if (icode != CODE_FOR_nothing)
|
||||
{
|
||||
rtx last = get_last_insn ();
|
||||
target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
|
||||
emit_unop_insn (icode, target, temp, UNKNOWN);
|
||||
return target;
|
||||
if (maybe_emit_unop_insn (icode, target, temp, UNKNOWN))
|
||||
return target;
|
||||
delete_insns_since (last);
|
||||
}
|
||||
|
||||
/* For floating point formats without a sign bit, implement signbit
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-03-19 Michael Matz <matz@suse.de>
|
||||
|
||||
PR target/43305
|
||||
* gcc.dg/pr43305.c: New testcase.
|
||||
|
||||
2010-03-19 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/43415
|
||||
|
16
gcc/testsuite/gcc.dg/pr43305.c
Normal file
16
gcc/testsuite/gcc.dg/pr43305.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os -ffast-math" } */
|
||||
extern int ilogbl(long double);
|
||||
extern int printf(const char *format, ...);
|
||||
|
||||
__attribute__((noinline, noclone))
|
||||
int foo(long double x)
|
||||
{
|
||||
return ilogbl(x);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("%d\n", foo(100));
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user