Andrea Corallo <andrea.cora...@arm.com> writes: > Andrea Corallo <andrea.cora...@arm.com> writes: > >> Hi all, >> >> here the latest version of the patch to enable Armv8.1-M Mainline >> LOB (low overhead branch) extension low overhead loops (LOL) feature >> using the 'loop-doloop' pass. >> >> I posted a previous version of it during stage 4. >> >> Given the following function: >> >> void >> loop (int *a) >> { >> for (int i = 0; i < 1000; i++) >> a[i] = i; >> } >> >> 'doloop_begin' and 'doloop_end' patterns translates into 'dls' and 'le' >> giving: >> >> loop: >> movw r2, #10000 >> movs r3, #0 >> subs r0, r0, #4 >> push {lr} >> dls lr, r2 >> .L2: >> str r3, [r0, #4]! >> adds r3, r3, #1 >> le lr, .L2 >> ldr pc, [sp], #4 >> >> bootstrapped arm-none-linux-gnueabihf, does not introduce testsuite >> regressions. >> >> Andrea > > Hi, > > double checking I spotted another test impacted by the patch that I > missed as first. > > Here the updated patch waving the check. > > Andrea > > gcc/ChangeLog > > 2020-06-18 Andrea Corallo <andrea.cora...@arm.com> > Mihail-Calin Ionescu <mihail.ione...@arm.com> > Iain Apreotesei <iain.apreote...@arm.com> > > * config/arm/arm-protos.h (arm_target_insn_ok_for_lob): New > prototype. > * config/arm/arm.c (TARGET_INVALID_WITHIN_DOLOOP): Define. > (arm_invalid_within_doloop): Implement invalid_within_doloop hook. > (arm_target_insn_ok_for_lob): New function. > * config/arm/arm.h (TARGET_HAVE_LOB): Define macro. > * config/arm/thumb2.md (*doloop_end_internal, doloop_begin) > (dls_insn): Add new patterns. > (doloop_end): Modify to select LR when LOB is available. > * config/arm/unspecs.md: Add new unspec. > * doc/sourcebuild.texi (arm_v8_1_lob_ok) > (arm_thumb2_ok_no_arm_v8_1_lob): Document new target supports > options. > > gcc/testsuite/ChangeLog > > 2020-06-18 Andrea Corallo <andrea.cora...@arm.com> > Mihail-Calin Ionescu <mihail.ione...@arm.com> > Iain Apreotesei <iain.apreote...@arm.com> > > * gcc.target/arm/lob.h: New header. > * gcc.target/arm/lob1.c: New testcase. > * gcc.target/arm/lob2.c: Likewise. > * gcc.target/arm/lob3.c: Likewise. > * gcc.target/arm/lob4.c: Likewise. > * gcc.target/arm/lob5.c: Likewise. > * gcc.target/arm/lob6.c: Likewise. > * gcc.target/arm/unsigned-extend-2.c: Do not run when generating > low loop overhead. > * gcc.target/arm/ivopts.c: Fix check for low loop overhead. > * lib/target-supports.exp (check_effective_target_arm_v8_1_lob) > (check_effective_target_arm_thumb2_ok_no_arm_v8_1_lob): New procs.
Ping Andrea