This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH, Pointer Bounds Checker 14/x] Passes [1/n] Expand interfaces
- From: Ilya Enkovich <enkovich dot gnu at gmail dot com>
- To: Jeff Law <law at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 30 Oct 2014 19:37:53 +0300
- Subject: Re: [PATCH, Pointer Bounds Checker 14/x] Passes [1/n] Expand interfaces
- Authentication-results: sourceware.org; auth=none
- References: <20141008185054 dot GA13454 at msticlxl57 dot ims dot intel dot com> <543C400E dot 1050706 at redhat dot com> <CAMbmDYadwsUerUMBAEVCFt80SZLcETxR2smV-HeW5t9kOUcKiw at mail dot gmail dot com> <5451CE7C dot 1000209 at redhat dot com>
On 29 Oct 23:37, Jeff Law wrote:
> On 10/15/14 11:54, Ilya Enkovich wrote:
> >Thanks for review! I see no more patches not reviewed at all. I see
> >4 more patches requiring approve before I can start a merge.
> >Two of them are parts of split #14 (Passes): #14.3 (Helper functions)
> >and #14.16 (Reduce bounds lifetime)
> These are fine. We can revisit LCM/anticipated in the future for
> the bounds lifetime reduction.
> >There is also #32 (hooks for i386 target). It has concern about TBAA
> >which I believe is not a problem in my case because accesses using
> >different types are not mixed.
> OK. That was the only pending issue with that patch, so it's good
> to go as well.
> >The final one is #33 (MPX ABI). I still see fail on one benchmark but
> >I don't feel ICE in LRA should prevent patch from been committed.
> Assuming it doesn't fail unless you've turned on MPX, that seems
> reasonable at this stage. Obviously we'd like to get that fixed
> during the general bugfixing phase.
> As I discussed with Areg, I wanted this stuff to wait until the
> Darwin port had settled a bit after the recent problems. While
> Darwin isn't happy yet, I think the remaining problems are
> manageable and isolated to the i686 code generator. So if you could
> bootstrap Darwin 64 bit as a sanity test along with a final
> bootstrap & regression test on x86_64 linux, then I think we're good
> to go.
I rebased patches on current trunk. Bootstrap and check are clean on linux-x86_64.
Darwin bootstrap has few issues due to IPA ICF pass. I also found my patches introduce an unused variable warning due to conditional code (under #ifdef ASM_OUTPUT_DEF) in varasm. With IPA ICF disabled and this warning fixed Darwin 64 bootstrap is OK.
ARM cross build revealed another problem with conditional code. Function immed_double_const was put under #if (TARGET_SUPPORTS_WIDE_INT == 0) some time ago but I missed it and didn't update my patches. With this fixed cross build is also OK.
Below are required changes. If these fixes are OK, I'm ready to commit whole series (I'm going to commit it as a single patch because didn't test each part separately).
diff --git a/gcc/varasm.c b/gcc/varasm.c
index eb68fd3..40eeb5e 100644
@@ -5522,7 +5522,6 @@ vec<alias_pair, va_gc> *alias_pairs;
do_assemble_alias (tree decl, tree target)
- tree orig_decl = decl;
/* Emulated TLS had better not get this var. */
@@ -5533,11 +5532,6 @@ do_assemble_alias (tree decl, tree target)
if (TREE_ASM_WRITTEN (decl))
- if (TREE_CODE (decl) == FUNCTION_DECL
- && cgraph_node::get (decl)->instrumentation_clone
- && cgraph_node::get (decl)->instrumented_version)
- orig_decl = cgraph_node::get (decl)->instrumented_version->decl;
id = DECL_ASSEMBLER_NAME (decl);
@@ -5572,6 +5566,13 @@ do_assemble_alias (tree decl, tree target)
+ tree orig_decl = decl;
+ if (TREE_CODE (decl) == FUNCTION_DECL
+ && cgraph_node::get (decl)->instrumentation_clone
+ && cgraph_node::get (decl)->instrumented_version)
+ orig_decl = cgraph_node::get (decl)->instrumented_version->decl;
/* Make name accessible from other files, if appropriate. */
if (TREE_PUBLIC (decl) || TREE_PUBLIC (orig_decl))
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 41c616d..04f677e 100644
@@ -6133,7 +6133,10 @@ init_emit_once (void)
for (mode = GET_CLASS_NARROWEST_MODE (MODE_POINTER_BOUNDS);
mode != VOIDmode;
mode = GET_MODE_WIDER_MODE (mode))
- const_tiny_rtx[mode] = immed_double_const (0, 0, mode);
+ wide_int wi_zero = wi::zero (GET_MODE_PRECISION (mode));
+ const_tiny_rtx[mode] = immed_wide_int_const (wi_zero, mode);
pc_rtx = gen_rtx_fmt_ (PC, VOIDmode);
ret_rtx = gen_rtx_fmt_ (RETURN, VOIDmode);