Patchwork [testsuite] ARM ivopts tests: skip for no thumb support

login
register
mail settings
Submitter Tom de Vries
Date June 24, 2011, 10:29 a.m.
Message ID <4E046701.4090306@codesourcery.com>
Download mbox | patch
Permalink /patch/101768/
State New
Headers show

Comments

Tom de Vries - June 24, 2011, 10:29 a.m.
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.

Thanks,
- Tom

2011-06-24  Janis Johnson  <janisjo@codesourcery.com>
	    Tom de Vries  <tom@codesourcery.com>

	* lib/target-supports.exp (check_effective_target_arm_nothumb)
	(check_effective_target_arm_thumb2): New effective targets.
	* gcc.target/arm/ivopts.c: Remove -mthumb/-marm.  Guard object-size
	properly.  Clean up temporary files.
	* gcc.target/arm/ivopts-2.c: Likewise.
	* gcc.target/arm/ivopts-3.c: Likewise.
	* gcc.target/arm/ivopts-4.c: Likewise.
	* gcc.target/arm/ivopts-5.c: Likewise.
	* gcc.target/arm/ivopts-6.c: Remove duplicate of ivopts.c.
Janis Johnson - June 24, 2011, 3:01 p.m.
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
Ramana Radhakrishnan - June 24, 2011, 3:03 p.m.
>> 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
Janis Johnson - June 24, 2011, 3:09 p.m.
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

Patch

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.