grunwald@foobar.colorado.edu (Dirk Grunwald) (10/17/89)
I'm having trouble compiling the following code. I'm willing to bash on the
mips.md description some more, but can't see why this instance isn't
covered.
The missing pattern is:
gcc -c test5.cc
test5.cc: In function int foo (struct bar *, int):
test5.cc:24: The following insn was not recognizable:
(insn 32 31 33 (parallel[
(set (reg:DF 6)
(mem:SF (reg:SI 76)))
(clobber (reg:SI 24))
] ) -1 (nil)
(nil))
but in mips.md, I have
(define_insn "movdf"
[(set (match_operand:DF 0 "general_operand" "=f,f,m,f,*f,*y")
(match_operand:DF 1 "general_operand" "f,m,f,F,*y,*f"))
and I don't understand why the pattern above isn't matched by
the arg. pair "f" & "m" (i.e. the second pattern). If anyone knows
what pattern *should* match this, I'll implement it.
The code causing this problem follows. This was on a decstation-3100
with the latest version. Note that the first use, passing the coerced
address to a function, doesn't cause the pattern miss, it's only the
second use that does. Any help appreciated.
----------------------------------------------------------------------
#include <stream.h>
typedef struct {
float *f;
double *d;
long *addr;
} bar;
int
foo(bar *b, int arg)
{
extern oof(double x);
oof( *((float*) b[arg].addr) );
cout << *((float*) b[arg].addr);
}
----------------------------------------------------------------------
p.s. I'm also having trouble with missing this pattern. I think it's
related the previous case. Is this so?
(insn 69 68 70 (parallel[
(set (reg:DF 6)
(mem/s:SF (plus:SI (reg/v/u:SI 64)
(const_int 8))))
(clobber (reg:SI 24))
] ) -1 (nil)
(nil))