Message ID | 4E046701.4090306@codesourcery.com |
---|---|
State | New |
Headers | show |
On 06/24/2011 03:29 AM, Tom de Vries wrote: > On 06/24/2011 12:07 AM, Janis Johnson wrote: >> On 06/23/2011 02:56 PM, Ramana Radhakrishnan wrote: >>> On 23 June 2011 22:36, Janis Johnson <janisjo@codesourcery.com> wrote: >>>> Tests gcc.target/arm/ivopts*.c add -mthumb but fail on targets without >>>> thumb support; skip those targets. The tests save temporary files and >>>> need to remove them at the end, easily done with cleanup-saved-temps. >>>> >>>> Test ivopts-6.c is the only one of the set that does not require thumb2 >>>> support in the check for object-size, and it fails for -march=iwmmxt >>>> and iwmmxt2; the check should probably be used on that test as well, >>>> although I haven't included it here. >>> >>> I'm not sure I understand the change for ivopts-6.c : >>> >>> It's skipping if there is no Thumb support by default but the test >>> assumes the test will run with -marm on the command line ? >>> >>> Ramana >> >> Oops, I got carried away and didn't notice that it uses -marm rather >> than -mthumb. I'll take another look at that one. >> >> Janis > > How about this patch? I removed all -mthumb/-marm option settings, and instead > focused on trying to guard the object-size tests properly. > > I introduced 2 new arm-related effective targets to accomplish this. > - arm_thumb2: Tests if we're compiling for thumb2. > - arm_nothumb: Tests if we're not compiling for any thumb. > I don't know how to get the same effect with the existing arm-related effective > targets. That looks good to me, and those effective targets will be very useful. Reviewers, is Tom's patch OK? Janis
>> I introduced 2 new arm-related effective targets to accomplish this. >> - arm_thumb2: Tests if we're compiling for thumb2. >> - arm_nothumb: Tests if we're not compiling for any thumb. >> I don't know how to get the same effect with the existing arm-related effective >> targets. > > That looks good to me, and those effective targets will be very useful. How is this different from arm_thumb2_ok and !arm_thumb2_ok ? If l Iook at arm_thumb2 that appears to be identical to what arm_thumb2_ok does. proc check_effective_target_arm_thumb2_ok { } { return [check_no_compiler_messages arm_thumb2_ok assembly { #if !defined(__thumb2__) #error FOO #endif } "-mthumb"] } +# Return 1 is this is an ARM target where is Thumb-2 used. + +proc check_effective_target_arm_thumb2 { } { + return [check_no_compiler_messages arm_thumb2 assembly { + #if !defined(__thumb2__) + #error FOO + #endif + } ""] +} + Or am I missing something ? Ramana
On 06/24/2011 08:03 AM, Ramana Radhakrishnan wrote: >>> I introduced 2 new arm-related effective targets to accomplish this. >>> - arm_thumb2: Tests if we're compiling for thumb2. >>> - arm_nothumb: Tests if we're not compiling for any thumb. >>> I don't know how to get the same effect with the existing arm-related effective >>> targets. >> >> That looks good to me, and those effective targets will be very useful. > > How is this different from arm_thumb2_ok and !arm_thumb2_ok ? > > If l Iook at arm_thumb2 that appears to be identical to what > arm_thumb2_ok does. > > proc check_effective_target_arm_thumb2_ok { } { > return [check_no_compiler_messages arm_thumb2_ok assembly { > #if !defined(__thumb2__) > #error FOO > #endif > } "-mthumb"] <======= HERE > } > > +# Return 1 is this is an ARM target where is Thumb-2 used. > + > +proc check_effective_target_arm_thumb2 { } { > + return [check_no_compiler_messages arm_thumb2 assembly { > + #if !defined(__thumb2__) > + #error FOO > + #endif > + } ""] > +} > + > > Or am I missing something ? > > Ramana arm_thumb_ok and arm_thumb2_ok check to see if the target will be as expected when compiling with -mthumb, and the tests that use it add -mthumb to the options. The new ones check to see if the target is thumb with current multilib options, and it can safely be used for dg-final. Janis Janis
diff -u gcc/testsuite/gcc.target/arm/ivopts-3.c (revision 0) gcc/testsuite/gcc.target/arm/ivopts-3.c (revision 0) --- gcc/testsuite/gcc.target/arm/ivopts-3.c (revision 0) +++ gcc/testsuite/gcc.target/arm/ivopts-3.c (revision 0) @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-Os -mthumb -fdump-tree-ivopts -save-temps" } */ +/* { dg-options "-Os -fdump-tree-ivopts -save-temps" } */ extern unsigned int foo2 (short*) __attribute__((pure)); @@ -19,2 +19,3 @@ -/* { dg-final { object-size text <= 30 { target arm_thumb2_ok } } } */ +/* { dg-final { object-size text <= 30 { target arm_thumb2 } } } */ /* { dg-final { cleanup-tree-dump "ivopts" } } */ +/* { dg-final { cleanup-saved-temps "ivopts" } } */ diff -u gcc/testsuite/gcc.target/arm/ivopts-4.c (revision 0) gcc/testsuite/gcc.target/arm/ivopts-4.c (revision 0) --- gcc/testsuite/gcc.target/arm/ivopts-4.c (revision 0) +++ gcc/testsuite/gcc.target/arm/ivopts-4.c (revision 0) @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-mthumb -Os -fdump-tree-ivopts -save-temps" } */ +/* { dg-options "-Os -fdump-tree-ivopts -save-temps" } */ extern unsigned int foo (int*) __attribute__((pure)); @@ -20,2 +20,3 @@ -/* { dg-final { object-size text <= 36 { target arm_thumb2_ok } } } */ +/* { dg-final { object-size text <= 36 { target arm_thumb2 } } } */ /* { dg-final { cleanup-tree-dump "ivopts" } } */ +/* { dg-final { cleanup-saved-temps "ivopts" } } */ diff -u gcc/testsuite/gcc.target/arm/ivopts-5.c (revision 0) gcc/testsuite/gcc.target/arm/ivopts-5.c (revision 0) --- gcc/testsuite/gcc.target/arm/ivopts-5.c (revision 0) +++ gcc/testsuite/gcc.target/arm/ivopts-5.c (revision 0) @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-Os -mthumb -fdump-tree-ivopts -save-temps" } */ +/* { dg-options "-Os -fdump-tree-ivopts -save-temps" } */ extern unsigned int foo (int*) __attribute__((pure)); @@ -19,2 +19,3 @@ -/* { dg-final { object-size text <= 30 { target arm_thumb2_ok } } } */ +/* { dg-final { object-size text <= 30 { target arm_thumb2 } } } */ /* { dg-final { cleanup-tree-dump "ivopts" } } */ +/* { dg-final { cleanup-saved-temps "ivopts" } } */ diff -u gcc/testsuite/gcc.target/arm/ivopts-2.c (revision 0) gcc/testsuite/gcc.target/arm/ivopts-2.c (revision 0) --- gcc/testsuite/gcc.target/arm/ivopts-2.c (revision 0) +++ gcc/testsuite/gcc.target/arm/ivopts-2.c (revision 0) @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-Os -mthumb -fdump-tree-ivopts -save-temps" } */ +/* { dg-options "-Os -fdump-tree-ivopts -save-temps" } */ extern void foo2 (short*); @@ -17,2 +17,3 @@ -/* { dg-final { object-size text <= 26 { target arm_thumb2_ok } } } */ +/* { dg-final { object-size text <= 26 { target arm_thumb2 } } } */ /* { dg-final { cleanup-tree-dump "ivopts" } } */ +/* { dg-final { cleanup-saved-temps "ivopts" } } */ diff -u gcc/testsuite/gcc.target/arm/ivopts.c (revision 0) gcc/testsuite/gcc.target/arm/ivopts.c (revision 0) --- gcc/testsuite/gcc.target/arm/ivopts.c (revision 0) +++ gcc/testsuite/gcc.target/arm/ivopts.c (revision 0) @@ -1,5 +1,5 @@ /* { dg-do assemble } */ -/* { dg-options "-Os -mthumb -fdump-tree-ivopts -save-temps" } */ +/* { dg-options "-Os -fdump-tree-ivopts -save-temps" } */ void tr5 (short array[], int n) @@ -14,2 +14,5 @@ -/* { dg-final { object-size text <= 20 { target arm_thumb2_ok } } } */ +/* { dg-final { object-size text <= 20 { target arm_thumb2 } } } */ +/* { dg-final { object-size text <= 32 { target { arm_nothumb && { ! arm_iwmmxt_ok } } } } } */ +/* { dg-final { object-size text <= 36 { target { arm_nothumb && arm_iwmmxt_ok } } } } */ /* { dg-final { cleanup-tree-dump "ivopts" } } */ +/* { dg-final { cleanup-saved-temps "ivopts" } } */ reverted: --- gcc/testsuite/gcc.target/arm/ivopts-6.c (revision 0) +++ /dev/null (new file) @@ -1,15 +0,0 @@ -/* { dg-do assemble } */ -/* { dg-options "-Os -fdump-tree-ivopts -save-temps -marm" } */ - -void -tr5 (short array[], int n) -{ - int x; - if (n > 0) - for (x = 0; x < n; x++) - array[x] = 0; -} - -/* { dg-final { scan-tree-dump-times "PHI <" 1 "ivopts"} } */ -/* { dg-final { object-size text <= 32 } } */ -/* { dg-final { cleanup-tree-dump "ivopts" } } */ only in patch2: unchanged: --- gcc/testsuite/lib/target-supports.exp (revision 173734) +++ gcc/testsuite/lib/target-supports.exp (working copy) @@ -1849,6 +1849,15 @@ proc check_effective_target_arm32 { } { }] } +# Return 1 is this is an arm target not using Thumb +proc check_effective_target_arm_nothumb { } { + return [check_no_compiler_messages arm_nothumb assembly { + #if (defined(__thumb__) || defined(__thumb2__)) + #error FOO + #endif + }] +} + # Return 1 if this is an ARM target that only supports aligned vector accesses proc check_effective_target_arm_vect_no_misalign { } { return [check_no_compiler_messages arm_vect_no_misalign assembly { @@ -1994,6 +2003,16 @@ proc check_effective_target_arm_thumb2_o } "-mthumb"] } +# Return 1 is this is an ARM target where is Thumb-2 used. + +proc check_effective_target_arm_thumb2 { } { + return [check_no_compiler_messages arm_thumb2 assembly { + #if !defined(__thumb2__) + #error FOO + #endif + } ""] +} + # Return 1 if the target supports executing NEON instructions, 0 # otherwise. Cache the result.