RFR (M): Enable HotSpot build with Clang

Christian Thalinger christian.thalinger at oracle.com
Mon Jun 3 14:21:55 PDT 2013


On Jun 3, 2013, at 6:31 AM, Volker Simonis <volker.simonis at gmail.com> wrote:

> On Fri, May 31, 2013 at 7:47 PM, Christian Thalinger <christian.thalinger at oracle.com> wrote:
> 
> On May 31, 2013, at 12:41 AM, David Holmes <david.holmes at oracle.com> wrote:
> 
> > I think this is mainly targetted at Volker but ...
> >
> > On 31/05/2013 4:32 AM, Christian Thalinger wrote:
> >>> Here is what I have after merging in your new changes:
> >>>
> >>> http://cr.openjdk.java.net/~twisti/8015252/webrev/
> >>>
> >>> I see two problems:
> >>>
> >>> 1)  It's not possible to turn off precompiled headers because of this:
> >>>
> >>> + ifeq ($(USE_CLANG), true)
> >>> +   # clang has precompiled headers support by default, but the user can switch
> >>> +   # it off by using 'USE_PRECOMPILED_HEADER=0' on the compile command line.
> >>> +   ifdef LP64
> >>> +     USE_PRECOMPILED_HEADER=1
> >>> +   else
> >>
> >> Let me rephrase that:  at least not with an environment variable.
> >
> > In this block:
> >
> > ! ifeq ($(USE_CLANG), true)
> > !   # clang has precompiled headers support by default, but the user can switch
> > !   # it off by using 'USE_PRECOMPILED_HEADER=0' on the compile command line.
> > !   ifdef LP64
> > !     USE_PRECOMPILED_HEADER=1
> > !   else
> > !     # We don't support precompiled headers on 32-bit builds because there some files are
> > !     # compiled with -fPIC while others are compiled without (see 'NONPIC_OBJ_FILES' rules.make)
> > !     # Clang produces an error if the PCH file was comiled with other options than the actual compilation unit.
> > !     USE_PRECOMPILED_HEADER=0
> > !   endif
> >
> > I think the LP64 case should be guarded by "ifeq ($(USE_PRECOMPILED_HEADERS),)".
> 
> Yes, will change that.
> 
> >
> > The comment "on the compile command line" should be "on the make command line" I think.
> 
> I removed the comment since with the above guard it works with either.
> 
> >
> > Typo: comiled
> 
> Fixed.
> 
> >
> > David
> > -----
> >
> >> -- Chris
> >>
> >>>
> >>> 2)  If I compile with clang on Mac and run the compiler regression tests a lot of them fail but they work with a debug VM.  So it seems that one of the files is broken with optimization on (-Os or -O3; -O0 is okay).
> 
> I had some time yesterday to figure which file it is:  opto/loopTransform.cpp.  Compiling this one with NO_OPT makes everything to work.
> 
> 
> I can confirm this on Linux.

Good.

> 
> How did you fix it exactly? Have you added:
> 
> OPT_CFLAGS/loopTransform.o = $(OPT_CFLAGS/NOOPT)
> 
> to 'amd64.make'

No.  I added it to gcc.make because there was already this one:
+   # 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation. 
+   ifneq "$(shell expr \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) = 3 \) \))" "0"
+     OPT_CFLAGS/mulnode.o += -O0
+   endif
I have no idea where this stuff is supposed to be.  Maybe we should move the mulnode one to {i486,amd64}.make as well.  Vladimir pushed this change in 2009.
> and excluded 'loopTransform.o' from precompiled header compilation in 'gcc.make' with:
> 
>     PCH_FLAG/loopTransform.o = $(PCH_FLAG/NO_PCH)

Yes.

Here is an updated webrev:

http://cr.openjdk.java.net/~twisti/8015252/webrev/

-- Chris

> 
> That's what I've done to solve solve the problem.

>  
> Here are some build time numbers for my MacBook Pro:
> 
> debug:
> ------
> 
> llvm-g++:
> 
> real    2m28.831s
> user    12m58.277s
> sys     2m6.650s
> 
> clang:
> 
> real    1m28.552s
> user    8m4.760s
> sys     0m56.263s
> 
> product:
> --------
> 
> llvm-g++:
> 
> real    2m16.939s
> user    12m32.473s
> sys     1m47.061s
> 
> clang:
> 
> real    1m35.744s
> user    8m50.101s
> sys     0m53.294s
> 
> I think I know which I'm going to use… :-)
> 
> -- Chris
> 
> >>>
> >>> Do you have any problems on Linux?
> >>>
> >>> -- Chris
> >>>
> >>>>
> >>>>>
> >>>>> David
> >>>>> -----
> >>>>>
> >>>>>> Please notice that I won't be in the office until the 3rd of June.
> >>>>>> Should you have any further change requests please feel free to edit the
> >>>>>> patch yourself if you like.
> >>>>>>
> >>>>>> Regards,
> >>>>>> Volker
> >>>>>>
> >>>>>>  -- Chris
> >>>>>>
> >>>>>>>      -- Chris
> >>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>> But you can say the exact same thing about the Solaris
> >>>>>>>>          gcc support.
> >>>>>>>>
> >>>>>>>>          Btw. I just trying to resurrect this.
> >>>>>>>>
> >>>>>>>>          -- Chris
> >>>>>>>>
> >>>>>>>>>
> >>>>>>>>> David
> >>>>>>>>> -----
> >>>>>>>>>
> >>>>>>>>>> Once it's in we could start with the JDK forest and
> >>>>>>>>          the configure part
> >>>>>>>>>> in the base repository. That would require two extra
> >>>>>>>>          change sets anyway.
> >>>>>>>>>> The HotSpot build currently isn't very
> >>>>>>>>          configure-agnostic anyway and
> >>>>>>>>>> once the other parts have been completed, configure
> >>>>>>>>          could just pass
> >>>>>>>>>> USE_CLANG=true (plus perhaps some extra variables in
> >>>>>>>>          the case we have
> >>>>>>>>>> more than one clang version on the system) to the
> >>>>>>>>          HotSpot build and
> >>>>>>>>>> everything should work.
> >>>>>>>>>> As a last step we would have to test on Mac as well.
> >>>>>>>>          I currently don't
> >>>>>>>>>> have one at hand, but sponsors are always welcome:)
> >>>>>>>>>>
> >>>>>>>>>> Volker
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>  David H.
> >>>>>>>>>>
> >>>>>>>>>>      -- Chris
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>          David
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>
> >>
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20130603/5edc681c/attachment.html 


More information about the hotspot-runtime-dev mailing list