Christophe Lyon <christophe.l...@linaro.org> writes: > Hi, > > While looking at GCC validation results when configured for ARM > cortex-m33 by default, I noticed that > FAIL: gcc.target/arm/cmse/mainline/soft/cmse-5.c -march=armv8-m.main > -mthumb -mfloat-abi=soft -O0 scan-assembler msr\tAPSR_nzcvqg, lr > > The corresponding line in the testcase is (are): > /* { dg-final { scan-assembler "msr\tAPSR_nzcvq, lr" { target { ! > arm_dsp } } } } */ > /* { dg-final { scan-assembler "msr\tAPSR_nzcvqg, lr" { target arm_dsp } } } > */ > > So the arm_dsp effective target is true and the test tries to match > APSR_nzcvqg, while APSR_nzcvq is generated, as expected. > > There is an inconsistency because the testcase is compiled with > -march=armv8-m.main, while arm_dsp is not: like most effective > targets, it does not take the current cflags into account. > In the present case, the -march flag is added by cmse.exp in the > arguments to gcc-dg-runtest. > > I tried to add [current_compiler_flags] to all arm effective targets > (for consistency, it wouldn't make sense to add it to arm_dsp only), > but then I noticed further problems...
Yeah, effective targets shouldn't depend on the compiler flags. They're supposed to be properties of the testing target (what it supports, what it enables by default, etc.) and are cached between tests that run with different options. CMSE isn't my area, so I don't know why the scan-assembler lines were written this way. Is the { target arm_dsp } line there for cases in which a user-specified -march flag manages to override -march=armv8-m.main? Thanks, Richard > For instance, in my configuration, when advsimd-intrinsics.exp is > executed, it tries > check_effective_target_arm_v8_2a_fp16_neon_hw > which fails, and then tries check_effective_target_arm_neon_fp16_ok > which succeeds and thus adds -mfloat-abi=softfp -mfp16-format=ieee to > additional_flags. > > Since $additional_flags is passed to gcc-dg-runtest, these flags are > visible by current_compiler_flags and taken into account when > computing effective_targets (since I modified them). > > So... when computing arm_v8_2a_fp16_scalar_ok, it uses > -mfloat-abi=softfp -mfp16-format=ieee and doesn't need to add any flag > beyond -march=armv8.2-a+fp16. > So et_arm_v8_2a_fp16_scalar_flags contains -march=armv8.2-a+fp16 only. > > Later on, while executing arm.exp, -mfloat-abi=softfp > -mfp16-format=ieee are not part of $DEFAULT_CFLAGS as used by > dg-runtest, but et_arm_v8_2a_fp16_scalar_flags is still in the cache > and it's not valid anymore. > > So..... before burying myself, is there already a way to make > effective-targets take the current compiler flags into account as > needed in gcc.target/arm/cmse/mainline/soft/cmse-5.c ? > > Not sure my explanation is clear enough :-) > > Thanks, > > Christophe