Sjoerd Meijer via llvm-dev
2018-Nov-15 14:15 UTC
[llvm-dev] [cfe-dev] [RFC][ARM] -Oz implies -mthumb
Yes, exactly this:> Sure, none of the cortex-m cores support ARM mode. Try cortex-a{5,7,8,9,15,53} etc and you'll see it works.Sorry for being a bit vague and unclear here: yes, I should have said cortex-a{5,7,8,9,15,53}. I was just having a play with this native compiler: gcc-5 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 when I noticed that -Os gives me Thumb on Cortex-A{8,9,17}, which is what I would expect, but with Clang -Oz I get A32. I haven't thought about the implementation yet, but I hope passing -mthumb in the driver is not that difficult when we i) target an A-core and AArch32 state, and ii) we optimise for minimum size. And if I have to update a lot of tests, then that's what it is I am afraid, if we agree this is a sensible change that is. Cheers, Sjoerd. ________________________________ From: cfe-dev <cfe-dev-bounces at lists.llvm.org> on behalf of Bruce Hoult via cfe-dev <cfe-dev at lists.llvm.org> Sent: 15 November 2018 13:31 To: Peter Smith Cc: llvm-dev; Clang Dev Subject: Re: [cfe-dev] [RFC][ARM] -Oz implies -mthumb Sure, none of the cortex-m cores support ARM mode. Try cortex-a{5,7,8,9,15,53} etc and you'll see it works. On Thu, Nov 15, 2018 at 5:10 AM, Peter Smith <peter.smith at linaro.org<mailto:peter.smith at linaro.org>> wrote: My understanding is that whether a gcc toolchain defaults to ARM or Thumb is a configuration time decision by whomever builds the toolchain. The linaro arm-linux-gnueabihf toolchain I have defaults to -mthumb and that doesn't vary for -mcpu or any other command line option. I haven't got a gcc to hand that defaults to -marm so that I can test whether -mcpu=cortex-m3 will change that to Thumb. If I try -marm -mcpu=cortex-m3 I get "error: target CPU does not support ARM mode". Can you give us a more concrete example about where GCC is inconsistent? For clang I'm not particularly fond of -Oz implying a change of instruction set state. I think that it would be difficult to document properly, especially how to tell clang that I really did mean -Oz on ARM. As well as being a bit messy to implement. I think that most users of clang would prefer to use Thumb(2) than ARM, although how to make change globally and give people enough warning could be challenging and we'd need to get a consensus from the community. I'd also not want to be the person updating all the tests with -marm. The reset vectors on some old architectures did need to be ARM state, although I think they had to be written in assembly. It is possible though that someone is using clang as the assembler driver and we'd pass through -mthumb when they weren't expecting it. Peter On Thu, 15 Nov 2018 at 12:39, Tim Northover via cfe-dev <cfe-dev at lists.llvm.org<mailto:cfe-dev at lists.llvm.org>> wrote:> > On Thu, 15 Nov 2018 at 12:25, Bruce Hoult <brucehoult at sifive.com<mailto:brucehoult at sifive.com>> wrote: > > OK, I just checked, and -mcpu=cortex-{m3,m4,m7,a7,a9,a15,a53} gives Thumb at -O1, -O1, -Os on the following gcc: > > If anything I'd be inclined to just default to Thumb always. I haven't > checked myself, but rumour has it the icache benefits make it faster > than ARM code as well as smaller in most cases. My one worry there is > with reset vectors, which I believe must be implemented in ARM in some > cases; but since GCC itself appears to be inconsistent here, hopefully > those people are already explicit about their needs. > > Cheers. > > Tim. > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org<mailto:cfe-dev at lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181115/20652697/attachment.html>
Sjoerd Meijer via llvm-dev
2018-Nov-15 14:18 UTC
[llvm-dev] [cfe-dev] [RFC][ARM] -Oz implies -mthumb
Ahhh, typo in my previous mail:> when I noticed that -Os gives me Thumb on Cortex-A{8,9,17}I wanted to say: when I noticed that "GCC -Os" gives me Thumb on Cortex-A{8,9,17} ________________________________ From: Sjoerd Meijer Sent: 15 November 2018 14:15:26 To: Peter Smith; Bruce Hoult Cc: llvm-dev; nd Subject: Re: [cfe-dev] [RFC][ARM] -Oz implies -mthumb Yes, exactly this:> Sure, none of the cortex-m cores support ARM mode. Try cortex-a{5,7,8,9,15,53} etc and you'll see it works.Sorry for being a bit vague and unclear here: yes, I should have said cortex-a{5,7,8,9,15,53}. I was just having a play with this native compiler: gcc-5 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 when I noticed that -Os gives me Thumb on Cortex-A{8,9,17}, which is what I would expect, but with Clang -Oz I get A32. I haven't thought about the implementation yet, but I hope passing -mthumb in the driver is not that difficult when we i) target an A-core and AArch32 state, and ii) we optimise for minimum size. And if I have to update a lot of tests, then that's what it is I am afraid, if we agree this is a sensible change that is. Cheers, Sjoerd. ________________________________ From: cfe-dev <cfe-dev-bounces at lists.llvm.org> on behalf of Bruce Hoult via cfe-dev <cfe-dev at lists.llvm.org> Sent: 15 November 2018 13:31 To: Peter Smith Cc: llvm-dev; Clang Dev Subject: Re: [cfe-dev] [RFC][ARM] -Oz implies -mthumb Sure, none of the cortex-m cores support ARM mode. Try cortex-a{5,7,8,9,15,53} etc and you'll see it works. On Thu, Nov 15, 2018 at 5:10 AM, Peter Smith <peter.smith at linaro.org<mailto:peter.smith at linaro.org>> wrote: My understanding is that whether a gcc toolchain defaults to ARM or Thumb is a configuration time decision by whomever builds the toolchain. The linaro arm-linux-gnueabihf toolchain I have defaults to -mthumb and that doesn't vary for -mcpu or any other command line option. I haven't got a gcc to hand that defaults to -marm so that I can test whether -mcpu=cortex-m3 will change that to Thumb. If I try -marm -mcpu=cortex-m3 I get "error: target CPU does not support ARM mode". Can you give us a more concrete example about where GCC is inconsistent? For clang I'm not particularly fond of -Oz implying a change of instruction set state. I think that it would be difficult to document properly, especially how to tell clang that I really did mean -Oz on ARM. As well as being a bit messy to implement. I think that most users of clang would prefer to use Thumb(2) than ARM, although how to make change globally and give people enough warning could be challenging and we'd need to get a consensus from the community. I'd also not want to be the person updating all the tests with -marm. The reset vectors on some old architectures did need to be ARM state, although I think they had to be written in assembly. It is possible though that someone is using clang as the assembler driver and we'd pass through -mthumb when they weren't expecting it. Peter On Thu, 15 Nov 2018 at 12:39, Tim Northover via cfe-dev <cfe-dev at lists.llvm.org<mailto:cfe-dev at lists.llvm.org>> wrote:> > On Thu, 15 Nov 2018 at 12:25, Bruce Hoult <brucehoult at sifive.com<mailto:brucehoult at sifive.com>> wrote: > > OK, I just checked, and -mcpu=cortex-{m3,m4,m7,a7,a9,a15,a53} gives Thumb at -O1, -O1, -Os on the following gcc: > > If anything I'd be inclined to just default to Thumb always. I haven't > checked myself, but rumour has it the icache benefits make it faster > than ARM code as well as smaller in most cases. My one worry there is > with reset vectors, which I believe must be implemented in ARM in some > cases; but since GCC itself appears to be inconsistent here, hopefully > those people are already explicit about their needs. > > Cheers. > > Tim. > _______________________________________________ > cfe-dev mailing list > cfe-dev at lists.llvm.org<mailto:cfe-dev at lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181115/4a8f2eba/attachment-0001.html>
Peter Smith via llvm-dev
2018-Nov-15 14:27 UTC
[llvm-dev] [cfe-dev] [RFC][ARM] -Oz implies -mthumb
On Thu, 15 Nov 2018 at 14:18, Sjoerd Meijer <Sjoerd.Meijer at arm.com> wrote:> > Ahhh, typo in my previous mail: > > > > when I noticed that -Os gives me Thumb on Cortex-A{8,9,17} > > > I wanted to say: > > > when I noticed that "GCC -Os" gives me Thumb on Cortex-A{8,9,17} > >Yes. Just to clarify my response. That particular linaro toolchain (I've got 5.3) defaults to -mthumb. It will also give you thumb code if you compile with -O3 though. It is a toolchain default and not an implication of -Os or -Oz. My vote is not imply ARM/Thumb state changes with optimization options. We've already got two ways to do it --target=thumb-none-eabi, --target=arm-none-eabi and -mthumb/-marm I think the potential confusion outweighs the potential benefit. I'm just one voice though. Peter ________________________________> From: Sjoerd Meijer > Sent: 15 November 2018 14:15:26 > To: Peter Smith; Bruce Hoult > Cc: llvm-dev; nd > Subject: Re: [cfe-dev] [RFC][ARM] -Oz implies -mthumb > > > > Yes, exactly this: > > > Sure, none of the cortex-m cores support ARM mode. Try cortex-a{5,7,8,9,15,53} etc and you'll see it works. > > Sorry for being a bit vague and unclear here: yes, I should have said cortex-a{5,7,8,9,15,53}. > I was just having a play with this native compiler: > > gcc-5 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 > > when I noticed that -Os gives me Thumb on Cortex-A{8,9,17}, which is what I would expect, but with Clang -Oz I get A32. > > I haven't thought about the implementation yet, but I hope passing -mthumb in the driver is not that difficult when we i) target an A-core and AArch32 state, and ii) we optimise for minimum size. And if I have to update a lot of tests, then that's what it is I am afraid, if we agree this is a sensible change that is. > > Cheers, > Sjoerd. > > > > > > > ________________________________ > From: cfe-dev <cfe-dev-bounces at lists.llvm.org> on behalf of Bruce Hoult via cfe-dev <cfe-dev at lists.llvm.org> > Sent: 15 November 2018 13:31 > To: Peter Smith > Cc: llvm-dev; Clang Dev > Subject: Re: [cfe-dev] [RFC][ARM] -Oz implies -mthumb > > Sure, none of the cortex-m cores support ARM mode. Try cortex-a{5,7,8,9,15,53} etc and you'll see it works. > > On Thu, Nov 15, 2018 at 5:10 AM, Peter Smith <peter.smith at linaro.org> wrote: > > My understanding is that whether a gcc toolchain defaults to ARM or > Thumb is a configuration time decision by whomever builds the > toolchain. The linaro arm-linux-gnueabihf toolchain I have defaults to > -mthumb and that doesn't vary for -mcpu or any other command line > option. I haven't got a gcc to hand that defaults to -marm so that I > can test whether -mcpu=cortex-m3 will change that to Thumb. If I try > -marm -mcpu=cortex-m3 I get "error: target CPU does not support ARM > mode". > > Can you give us a more concrete example about where GCC is inconsistent? > > For clang I'm not particularly fond of -Oz implying a change of > instruction set state. I think that it would be difficult to document > properly, especially how to tell clang that I really did mean -Oz on > ARM. As well as being a bit messy to implement. > > I think that most users of clang would prefer to use Thumb(2) than > ARM, although how to make change globally and give people enough > warning could be challenging and we'd need to get a consensus from the > community. I'd also not want to be the person updating all the tests > with -marm. > > The reset vectors on some old architectures did need to be ARM state, > although I think they had to be written in assembly. It is possible > though that someone is using clang as the assembler driver and we'd > pass through -mthumb when they weren't expecting it. > > Peter > On Thu, 15 Nov 2018 at 12:39, Tim Northover via cfe-dev > <cfe-dev at lists.llvm.org> wrote: > > > > On Thu, 15 Nov 2018 at 12:25, Bruce Hoult <brucehoult at sifive.com> wrote: > > > OK, I just checked, and -mcpu=cortex-{m3,m4,m7,a7,a9,a15,a53} gives Thumb at -O1, -O1, -Os on the following gcc: > > > > If anything I'd be inclined to just default to Thumb always. I haven't > > checked myself, but rumour has it the icache benefits make it faster > > than ARM code as well as smaller in most cases. My one worry there is > > with reset vectors, which I believe must be implemented in ARM in some > > cases; but since GCC itself appears to be inconsistent here, hopefully > > those people are already explicit about their needs. > > > > Cheers. > > > > Tim. > > _______________________________________________ > > cfe-dev mailing list > > cfe-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev > >