OSDN Git Service

* lib/target-supports.exp (current_target_name): New.
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Jan 2005 18:24:02 +0000 (18:24 +0000)
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Jan 2005 18:24:02 +0000 (18:24 +0000)
(check_effective_target_ilp32, check_effective_target_lp64):
Cache the result to use as long as the current target, with
multilib flags, remains the same.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94168 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp

index 91c9cdb..5b64d14 100644 (file)
@@ -1,5 +1,10 @@
 2005-01-24  Janis Johnson  <janis187@us.ibm.com>
 
+       * lib/target-supports.exp (current_target_name): New.
+       (check_effective_target_ilp32, check_effective_target_lp64):
+       Cache the result to use as long as the current target, with
+       multilib flags, remains the same.
+
        * lib/gcc-dg.exp (skip_test_and_clear_xfail): Remove.
        (dg-require-weak, dg-require-visibility, dg-require-alias,
        dg-require-dg-sections, dg-require-profiling, dg-require-iconv,
index 1f966de..4a91b94 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright (C) 1999, 2001, 2003, 2004 Free Software Foundation, Inc.
+#   Copyright (C) 1999, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -42,6 +42,16 @@ proc get_compiler_messages {basename type contents} {
     return $lines
 }
 
+proc current_target_name { } {
+    global target_info
+    if [info exists target_info(target,name)] {
+       set answer $target_info(target,name)
+    } else {
+       set answer ""
+    }
+    return $answer
+}
+
 ###############################
 # proc check_weak_available { }
 ###############################
@@ -418,26 +428,74 @@ proc check_alpha_max_hw_available { } {
 
 # Return 1 if we're generating 32-bit code using default options, 0
 # otherwise.
+#
+# When the target name changes, replace the cached result.
 
 proc check_effective_target_ilp32 { } {
-    verbose "check_effective_target_ilp32: compiling source" 2
-    set answer [string match "" [get_compiler_messages ilp32 object {
-       int dummy[(sizeof (int) == 4 && sizeof (void *) == 4 && sizeof (long) == 4 ) ? 1 : -1];
-    }]]
-    verbose "check_effective_target_ilp32: returning $answer" 2
-    return $answer
+    global et_ilp32_saved
+    global et_ilp32_target_name
+
+    if { ![info exists et_ilp32_target_name] } {
+       set et_ilp32_target_name ""
+    }
+
+    # If the target has changed since we set the cached value, clear it.
+    set current_target [current_target_name]
+    if { $current_target != $et_ilp32_target_name } {
+       verbose "check_effective_target_ilp32: `$et_ilp32_target_name' `$current_target'" 2
+       set et_ilp32_target_name $current_target
+       if { [info exists et_ilp32_saved] } {
+           verbose "check_effective_target_ilp32: removing cached result" 2
+           unset et_ilp32_saved
+       }
+    }
+
+    if [info exists et_ilp32_saved] {
+       verbose "check-effective_target_ilp32: using cached result" 2
+    } else {
+       verbose "check_effective_target_ilp32: compiling source" 2
+       set et_ilp32_saved [string match "" [get_compiler_messages ilp32 object {
+           int dummy[(sizeof (int) == 4 && sizeof (void *) == 4 && sizeof (long) == 4 ) ? 1 : -1];
+       }]]
+    }
+    verbose "check_effective_target_ilp32: returning $et_ilp32_saved" 2
+    return $et_ilp32_saved
 }
 
 # Return 1 if we're generating 64-bit code using default options, 0
 # otherwise.
+#
+# When the target name changes, replace the cached result.
 
 proc check_effective_target_lp64 { } {
-    verbose "check_effective_target_lp64: compiling source" 2
-    set answer [string match "" [get_compiler_messages lp64 object {
-       int dummy[(sizeof (int) == 4 && sizeof (void *) == 8 && sizeof (long) == 8 ) ? 1 : -1];
-    }]]
-    verbose "check_effective_target_lp64: returning $answer" 2
-    return $answer
+    global et_lp64_saved
+    global et_lp64_target_name
+
+    if { ![info exists et_lp64_target_name] } {
+       set et_lp64_target_name ""
+    }
+
+    # If the target has changed since we set the cached value, clear it.
+    set current_target [current_target_name]
+    if { $current_target != $et_lp64_target_name } {
+       verbose "check_effective_target_lp64: `$et_lp64_target_name' `$current_target'" 2
+       set et_lp64_target_name $current_target
+       if [info exists et_lp64_saved] {
+           verbose "check_effective_target_lp64: removing cached result" 2
+           unset et_lp64_saved
+       }
+    }
+
+    if [info exists et_lp64_saved] {
+       verbose "check_effective_target_lp64: using cached result" 2
+    } else {
+       verbose "check_effective_target_lp64: compiling source" 2
+       set et_lp64_saved [string match "" [get_compiler_messages lp64 object {
+           int dummy[(sizeof (int) == 4 && sizeof (void *) == 8 && sizeof (long) == 8 ) ? 1 : -1];
+       }]]
+    }
+    verbose "check_effective_target_lp64: returning $et_lp64_saved" 2
+    return $et_lp64_saved
 }
 
 # Return 1 if the target supports hardware vectors of int, 0 otherwise.