Commit 5588864d by Richard Guenther Committed by Richard Biener

re PR tree-optimization/44043 (sorry, unimplemented: inlining failed in call to…

re PR tree-optimization/44043 (sorry, unimplemented: inlining failed in call to 'dst_output': optimizing for size and code size would grow)

2010-05-09  Richard Guenther  <rguenther@suse.de>

	PR middle-end/44043
	* ipa-inline.c (estimate_function_body_sizes): Return after
	disregarding inline limits.

	* gcc.c-torture/compile/pr44043.c: New testcase.

From-SVN: r159200
parent 64ed87b4
2010-05-09 Richard Guenther <rguenther@suse.de>
PR middle-end/44043
* ipa-inline.c (estimate_function_body_sizes): Return after
disregarding inline limits.
2010-05-09 Richard Guenther <rguenther@suse.de>
* gcc.c (store_arg): Revert last change.
2010-05-08 Sandra Loosemore <sandra@codesourcery.com>
......
......@@ -1835,10 +1835,13 @@ estimate_function_body_sizes (struct cgraph_node *node)
if (node->local.disregard_inline_limits)
{
if (dump_file)
fprintf (dump_file, "Disregarding inline limits.\n");
inline_summary (node)->self_time = 0;
inline_summary (node)->self_size = 0;
inline_summary (node)->time_inlining_benefit = 0;
inline_summary (node)->size_inlining_benefit = 0;
return;
}
if (dump_file)
......
2010-05-09 Richard Guenther <rguenther@suse.de>
PR middle-end/44043
* gcc.c-torture/compile/pr44043.c: New testcase.
2010-05-09 Richard Guenther <rguenther@suse.de>
* gcc.dg/ipa/ipa-pta-11.c: Make p and q referenced.
2010-05-09 Eric Botcazou <ebotcazou@adacore.com>
......
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned int __u32;
typedef unsigned long __kernel_size_t;
typedef __kernel_size_t size_t;
typedef __u8 uint8_t;
typedef __u16 __be16;
typedef __u32 __be32;
struct msghdr {
struct iovec * msg_iov;
unsigned msg_flags;
};
enum { IPPROTO_ICMP = 1 };
struct sk_buff { };
static inline __attribute__((always_inline)) struct dst_entry *
skb_dst(const struct sk_buff *skb)
{
};
enum nf_inet_hooks { NF_INET_LOCAL_OUT };
struct net_device {
unsigned mtu;
};
static inline __attribute__((always_inline)) int
NF_HOOK_THRESH(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *), int thresh)
{
int ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, thresh);
if (ret == 1)
ret = okfn(skb);
return ret;
}
static inline __attribute__((always_inline)) int
NF_HOOK(uint8_t pf, unsigned int hook, struct sk_buff *skb,
struct net_device *in, struct net_device *out,
int (*okfn)(struct sk_buff *))
{
return NF_HOOK_THRESH(pf, hook, skb, in, out, okfn, (-((int)(~0U>>1)) - 1));
}
struct dst_entry {
struct net_device *dev;
int (*output)(struct sk_buff*);
};
static inline __attribute__((always_inline)) int dst_output(struct sk_buff *skb) {
return skb_dst(skb)->output(skb);
};
struct iphdr {
__u8 protocol;
};
struct inet_sock {
__be16 inet_dport;
__u8 recverr: 1, hdrincl: 1;
struct { } cork;
};
struct icmphdr {
__u8 type;
};
struct rtable {
union { struct dst_entry dst; } u;
__be32 rt_dst;
};
struct sock;
struct inet_sock *inet_sk (struct sock *);
struct net *sock_net (struct sock *);
void *skb_transport_header (struct sk_buff *);
static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
struct rtable *rt, unsigned int flags)
{
struct inet_sock *inet = inet_sk(sk);
struct net *net = sock_net(sk);
struct iphdr *iph;
struct sk_buff *skb;
if (length > rt->u.dst.dev->mtu)
ip_local_error(sk, 90, rt->rt_dst, inet->inet_dport, rt->u.dst.dev->mtu);
if (flags&0x10)
goto out;
if (iph->protocol == IPPROTO_ICMP)
icmp_out_count(net, ((struct icmphdr *)skb_transport_header(skb))->type);
NF_HOOK(2, NF_INET_LOCAL_OUT, skb, ((void *)0), rt->u.dst.dev,
dst_output);
out:
while (0);
}
int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
{
raw_send_hdrinc(sk, msg->msg_iov, len, (void *)0, msg->msg_flags);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment