[llvm-commits] [llvm-gcc-4.2] r41561 - in /llvm-gcc-4.2/trunk/gcc: ada/misc.c c-decl.c cp/except.c except.c expr.h java/decl.c libfuncs.h llvm-convert.cpp llvm-internal.h objc/objc-act.c optabs.c

2007-08-29 Thread Duncan Sands
Author: baldrick
Date: Wed Aug 29 02:01:18 2007
New Revision: 41561

URL: http://llvm.org/viewvc/llvm-project?rev=41561&view=rev
Log:
Use the correct personality and unwind_resume functions for
the language being compiled.

Modified:
llvm-gcc-4.2/trunk/gcc/ada/misc.c
llvm-gcc-4.2/trunk/gcc/c-decl.c
llvm-gcc-4.2/trunk/gcc/cp/except.c
llvm-gcc-4.2/trunk/gcc/except.c
llvm-gcc-4.2/trunk/gcc/expr.h
llvm-gcc-4.2/trunk/gcc/java/decl.c
llvm-gcc-4.2/trunk/gcc/libfuncs.h
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
llvm-gcc-4.2/trunk/gcc/llvm-internal.h
llvm-gcc-4.2/trunk/gcc/objc/objc-act.c
llvm-gcc-4.2/trunk/gcc/optabs.c

Modified: llvm-gcc-4.2/trunk/gcc/ada/misc.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/ada/misc.c?rev=41561&r1=41560&r2=41561&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/ada/misc.c (original)
+++ llvm-gcc-4.2/trunk/gcc/ada/misc.c Wed Aug 29 02:01:18 2007
@@ -512,8 +512,8 @@
  right exception regions.  */
   using_eh_for_cleanups ();
 
-  eh_personality_libfunc = init_one_libfunc ("__gnat_eh_personality");
   /* LLVM LOCAL begin */
+  llvm_eh_personality_libfunc = llvm_init_one_libfunc 
("__gnat_eh_personality");
   default_init_unwind_resume_libfunc ();
   /* LLVM LOCAL end */
   lang_eh_type_covers = gnat_eh_type_covers;

Modified: llvm-gcc-4.2/trunk/gcc/c-decl.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-decl.c?rev=41561&r1=41560&r2=41561&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/c-decl.c (original)
+++ llvm-gcc-4.2/trunk/gcc/c-decl.c Wed Aug 29 02:01:18 2007
@@ -3550,10 +3550,12 @@
 return;
 
   c_eh_initialized_p = true;
-  eh_personality_libfunc
-= init_one_libfunc (USING_SJLJ_EXCEPTIONS
-   ? "__gcc_personality_sj0"
-   : "__gcc_personality_v0");
+  /* LLVM local begin */
+  llvm_eh_personality_libfunc
+= llvm_init_one_libfunc (USING_SJLJ_EXCEPTIONS
+ ? "__gcc_personality_sj0"
+ : "__gcc_personality_v0");
+  /* LLVM local end */
   default_init_unwind_resume_libfunc ();
   using_eh_for_cleanups ();
 }

Modified: llvm-gcc-4.2/trunk/gcc/cp/except.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/except.c?rev=41561&r1=41560&r2=41561&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/cp/except.c (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/except.c Wed Aug 29 02:01:18 2007
@@ -78,11 +78,15 @@
   call_unexpected_node
 = push_throw_library_fn (get_identifier ("__cxa_call_unexpected"), tmp);
 
-  eh_personality_libfunc = init_one_libfunc (USING_SJLJ_EXCEPTIONS
-? "__gxx_personality_sj0"
-: "__gxx_personality_v0");
+  /* LLVM local begin */
+  llvm_eh_personality_libfunc
+= llvm_init_one_libfunc (USING_SJLJ_EXCEPTIONS
+ ? "__gxx_personality_sj0"
+ : "__gxx_personality_v0");
+  /* LLVM local end */
   if (targetm.arm_eabi_unwinder)
-unwind_resume_libfunc = init_one_libfunc ("__cxa_end_cleanup");
+/* LLVM local */
+llvm_unwind_resume_libfunc = llvm_init_one_libfunc ("__cxa_end_cleanup");
   else
 default_init_unwind_resume_libfunc ();
 
@@ -354,9 +358,12 @@
 
 case lang_java:
   state = chose_java;
-  eh_personality_libfunc = init_one_libfunc (USING_SJLJ_EXCEPTIONS
-? "__gcj_personality_sj0"
-: "__gcj_personality_v0");
+  /* LLVM local begin */
+  llvm_eh_personality_libfunc
+= llvm_init_one_libfunc (USING_SJLJ_EXCEPTIONS
+ ? "__gcj_personality_sj0"
+ : "__gcj_personality_v0");
+  /* LLVM local end */
   break;
 
 default:

Modified: llvm-gcc-4.2/trunk/gcc/except.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/except.c?rev=41561&r1=41560&r2=41561&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/except.c (original)
+++ llvm-gcc-4.2/trunk/gcc/except.c Wed Aug 29 02:01:18 2007
@@ -4007,9 +4007,11 @@
 default_init_unwind_resume_libfunc (void)
 {
   /* The default c++ routines aren't actually c++ specific, so use those.  */
-  unwind_resume_libfunc =
-init_one_libfunc ( USING_SJLJ_EXCEPTIONS ? "_Unwind_SjLj_Resume"
-: "_Unwind_Resume");
+  /* LLVM local begin */
+  llvm_unwind_resume_libfunc = llvm_init_one_libfunc ( USING_SJLJ_EXCEPTIONS ?
+   "_Unwind_SjLj_Resume"
+   : "_Unwind_Resume");

[llvm-commits] [llvm-gcc-4.0] r41562 - /llvm-gcc-4.0/trunk/gcc/config/sparc/sparc.h

2007-08-29 Thread Anton Korobeynikov
Author: asl
Date: Wed Aug 29 04:27:52 2007
New Revision: 41562

URL: http://llvm.org/viewvc/llvm-project?rev=41562&view=rev
Log:
Unbreak sparc builds

Modified:
llvm-gcc-4.0/trunk/gcc/config/sparc/sparc.h

Modified: llvm-gcc-4.0/trunk/gcc/config/sparc/sparc.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/sparc/sparc.h?rev=41562&r1=41561&r2=41562&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/config/sparc/sparc.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/sparc/sparc.h Wed Aug 29 04:27:52 2007
@@ -1547,7 +1547,7 @@
is at the high-address end of the local variables;
that is, each additional local variable allocated
goes at a more negative offset in the frame.  */
-#define FRAME_GROWS_DOWNWARD
+#define FRAME_GROWS_DOWNWARD 1
 
 /* Offset within stack frame to start allocating local variables at.
If FRAME_GROWS_DOWNWARD, this is the offset to the END of the


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r41563 - in /llvm-gcc-4.2/trunk/gcc: cp/except.c except.c except.h llvm-convert.cpp

2007-08-29 Thread Duncan Sands
Author: baldrick
Date: Wed Aug 29 09:34:36 2007
New Revision: 41563

URL: http://llvm.org/viewvc/llvm-project?rev=41563&view=rev
Log:
Let languages specify how to add a catch-all to the
end of an eh_selector call.

Modified:
llvm-gcc-4.2/trunk/gcc/cp/except.c
llvm-gcc-4.2/trunk/gcc/except.c
llvm-gcc-4.2/trunk/gcc/except.h
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/cp/except.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/except.c?rev=41563&r1=41562&r2=41563&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/cp/except.c (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/except.c Wed Aug 29 09:34:36 2007
@@ -56,6 +56,16 @@
 static int can_convert_eh (tree, tree);
 static tree cp_protect_cleanup_actions (void);
 
+/* LLVM local begin */
+/* Do nothing (return NULL_TREE).  */
+
+tree
+return_null_tree (void)
+{
+  return NULL_TREE;
+}
+/* LLVM local end */
+
 /* Sets up all the global eh stuff that needs to be initialized at the
start of compilation.  */
 
@@ -92,6 +102,8 @@
 
   lang_eh_runtime_type = build_eh_type_type;
   lang_protect_cleanup_actions = &cp_protect_cleanup_actions;
+  /* LLVM local */
+  lang_eh_catch_all = return_null_tree;
 }
 
 /* Returns an expression to be executed if an unhandled exception is

Modified: llvm-gcc-4.2/trunk/gcc/except.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/except.c?rev=41563&r1=41562&r2=41563&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/except.c (original)
+++ llvm-gcc-4.2/trunk/gcc/except.c Wed Aug 29 09:34:36 2007
@@ -95,6 +95,11 @@
 /* Map a type to a runtime object to match type.  */
 tree (*lang_eh_runtime_type) (tree);
 
+/* LLVM local begin */
+/* Return a type that catches all others */
+tree (*lang_eh_catch_all) (void);
+/* LLVM local end */
+
 /* A hash table of label to region number.  */
 
 struct ehl_map_entry GTY(())

Modified: llvm-gcc-4.2/trunk/gcc/except.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/except.h?rev=41563&r1=41562&r2=41563&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/except.h (original)
+++ llvm-gcc-4.2/trunk/gcc/except.h Wed Aug 29 09:34:36 2007
@@ -139,6 +139,13 @@
 /* Map a type to a runtime object to match type.  */
 extern tree (*lang_eh_runtime_type) (tree);
 
+/* LLVM local begin */
+/* If non-NULL, this function returns a type that covers all others,
+   a "catch-all" type.  It may also return NULL_TREE, indicating that
+   the null runtime object catches all types, as in C++.  */
+extern tree (*lang_eh_catch_all) (void);
+/* LLVM local end */
+
 
 /* Just because the user configured --with-sjlj-exceptions=no doesn't
mean that we can use call frame exceptions.  Detect that the target

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41563&r1=41562&r2=41563&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed Aug 29 09:34:36 2007
@@ -1840,12 +1840,27 @@
   }
 }
 
-if (can_throw_external_1(i, false))
+if (can_throw_external_1(i, false)) {
   // Some exceptions from this region may not be caught by any handler.
   // Since invokes are required to branch to the unwind label no matter
   // what exception is being unwound, append a catch-all.
-  // FIXME: The use of null as catch-all is C++ specific.
-  Args.push_back(Constant::getNullValue(PointerType::get(Type::Int8Ty)));
+
+  // The representation of a catch-all is language specific.
+  Value *Catch_All;
+  if (!lang_eh_catch_all) {
+// Use a "cleanup" - this should be good enough for most languages.
+Catch_All = ConstantInt::get(Type::Int32Ty, 0);
+  } else {
+tree catch_all_type = lang_eh_catch_all();
+if (catch_all_type == NULL_TREE)
+  // Use a C++ style null catch-all object.
+  Catch_All = Constant::getNullValue(PointerType::get(Type::Int8Ty));
+else
+  // This language has a type that catches all others.
+  Catch_All = Emit(lookup_type_for_runtime(catch_all_type), 0);
+  }
+  Args.push_back(Catch_All);
+}
 
 // Emit the selector call.
 Value *Select = Builder.CreateCall(FuncEHSelector, Args.begin(), 
Args.end(),


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41566 - /llvm/trunk/include/llvm/ADT/APInt.h

2007-08-29 Thread Chris Lattner
Author: lattner
Date: Wed Aug 29 11:21:18 2007
New Revision: 41566

URL: http://llvm.org/viewvc/llvm-project?rev=41566&view=rev
Log:
getMinSignedBits needs to take into consider the sign bit when the value is 
positive.

Modified:
llvm/trunk/include/llvm/ADT/APInt.h

Modified: llvm/trunk/include/llvm/ADT/APInt.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/APInt.h?rev=41566&r1=41565&r2=41566&view=diff

==
--- llvm/trunk/include/llvm/ADT/APInt.h (original)
+++ llvm/trunk/include/llvm/ADT/APInt.h Wed Aug 29 11:21:18 2007
@@ -856,7 +856,7 @@
   inline uint32_t getMinSignedBits() const {
 if (isNegative())
   return BitWidth - countLeadingOnes() + 1;
-return getActiveBits();
+return getActiveBits()+1;
   }
 
   /// This method attempts to return the value of this APInt as a zero extended


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41565 - in /llvm/trunk/lib/AsmParser: llvmAsmParser.cpp.cvs llvmAsmParser.y.cvs

2007-08-29 Thread Chris Lattner
Author: lattner
Date: Wed Aug 29 11:15:23 2007
New Revision: 41565

URL: http://llvm.org/viewvc/llvm-project?rev=41565&view=rev
Log:
update these

Modified:
llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs
llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs?rev=41565&r1=41564&r2=41565&view=diff

==
--- llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs Wed Aug 29 11:15:23 2007
@@ -4549,7 +4549,7 @@
 }
 
 // Create the InvokeInst
-InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
+InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), 
Args.end());
 II->setCallingConv(yyvsp[-12].UIntVal);
 yyval.TermInstVal = II;
 delete yyvsp[-8].ValueRefList;

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs?rev=41565&r1=41564&r2=41565&view=diff

==
--- llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs Wed Aug 29 11:15:23 2007
@@ -2652,7 +2652,7 @@
 }
 
 // Create the InvokeInst
-InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
+InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), 
Args.end());
 II->setCallingConv($2);
 $$ = II;
 delete $6;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41567 - /llvm/trunk/include/llvm/Instructions.h

2007-08-29 Thread Chris Lattner
Author: lattner
Date: Wed Aug 29 11:32:50 2007
New Revision: 41567

URL: http://llvm.org/viewvc/llvm-project?rev=41567&view=rev
Log:
Silence implicit 64->32-bit conversion warnings.

Modified:
llvm/trunk/include/llvm/Instructions.h

Modified: llvm/trunk/include/llvm/Instructions.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=41567&r1=41566&r2=41567&view=diff

==
--- llvm/trunk/include/llvm/Instructions.h (original)
+++ llvm/trunk/include/llvm/Instructions.h Wed Aug 29 11:32:50 2007
@@ -762,17 +762,10 @@
 // This argument ensures that we have an iterator we can
 // do arithmetic on in constant time
 std::random_access_iterator_tag) {
-typename std::iterator_traits::difference_type NumArgs = 
-  std::distance(ArgBegin, ArgEnd);
-
-if (NumArgs > 0) {
-  // This requires that the iterator points to contiguous memory.
-  init(Func, &*ArgBegin, NumArgs);
-}
-else {
-  init(Func, 0, NumArgs);
-}
+unsigned NumArgs = (unsigned)std::distance(ArgBegin, ArgEnd);
 
+// This requires that the iterator points to contiguous memory.
+init(Func, NumArgs ? &*ArgBegin : 0, NumArgs);
 setName(Name);
   }
 
@@ -1552,17 +1545,10 @@
 // This argument ensures that we have an iterator we can
 // do arithmetic on in constant time
 std::random_access_iterator_tag) {
-typename std::iterator_traits::difference_type NumArgs = 
-  std::distance(ArgBegin, ArgEnd);
-
-if (NumArgs > 0) {
-  // This requires that the iterator points to contiguous memory.
-  init(Func, IfNormal, IfException, &*ArgBegin, NumArgs);
-}
-else {
-  init(Func, IfNormal, IfException, 0, NumArgs);
-}
+unsigned NumArgs = (unsigned)std::distance(ArgBegin, ArgEnd);
 
+// This requires that the iterator points to contiguous memory.
+init(Func, IfNormal, IfException, NumArgs ? &*ArgBegin : 0, NumArgs);
 setName(Name);
   }
 


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41568 - /llvm/trunk/configure

2007-08-29 Thread Tanya Lattner
Author: tbrethou
Date: Wed Aug 29 11:38:16 2007
New Revision: 41568

URL: http://llvm.org/viewvc/llvm-project?rev=41568&view=rev
Log:
Updating configure script to enable MIPS.

Modified:
llvm/trunk/configure

Modified: llvm/trunk/configure
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/configure?rev=41568&r1=41567&r2=41568&view=diff

==
--- llvm/trunk/configure (original)
+++ llvm/trunk/configure Wed Aug 29 11:38:16 2007
@@ -2360,6 +2360,7 @@
   alpha*-*)   llvm_cv_target_arch="Alpha" ;;
   ia64-*) llvm_cv_target_arch="IA64" ;;
   arm-*)  llvm_cv_target_arch="ARM" ;;
+  mips-*) llvm_cv_target_arch="Mips" ;;
   *)  llvm_cv_target_arch="Unknown" ;;
 esac
 fi
@@ -4645,6 +4646,8 @@
  ;;
 ARM) TARGET_HAS_JIT=0
  ;;
+Mips)TARGET_HAS_JIT=0
+ ;;
 *)   TARGET_HAS_JIT=0
  ;;
   esac
@@ -4726,7 +4729,7 @@
 fi
 
 case "$enableval" in
-  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha IA64 ARM" ;;
+  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha IA64 ARM Mips" ;;
   host-only)
 case "$llvm_cv_target_arch" in
   x86) TARGETS_TO_BUILD="X86" ;;
@@ -4736,6 +4739,7 @@
   Alpha)   TARGETS_TO_BUILD="Alpha" ;;
   IA64)TARGETS_TO_BUILD="IA64" ;;
   ARM) TARGETS_TO_BUILD="ARM" ;;
+  Mips)TARGETS_TO_BUILD="Mips" ;;
   *)   { { echo "$as_me:$LINENO: error: Can not set target to build" 
>&5
 echo "$as_me: error: Can not set target to build" >&2;}
{ (exit 1); exit 1; }; } ;;
@@ -4750,6 +4754,7 @@
 alpha)   TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
 ia64)TARGETS_TO_BUILD="IA64 $TARGETS_TO_BUILD" ;;
 arm) TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
+mips)TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
 *) { { echo "$as_me:$LINENO: error: Unrecognized target $a_target" >&5
 echo "$as_me: error: Unrecognized target $a_target" >&2;}
{ (exit 1); exit 1; }; } ;;
@@ -10369,7 +10374,7 @@
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext < conftest.$ac_ext
+  echo '#line 12521 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -14231,11 +14236,11 @@
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14234: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14239: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
-   echo "$as_me:14238: \$? = $ac_status" >&5
+   echo "$as_me:14243: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
  # The compiler can only warn and ignore the option if not recognized
  # So say no if there are warnings other than the usual output.
@@ -14499,11 +14504,11 @@
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14502: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14507: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
-   echo "$as_me:14506: \$? = $ac_status" >&5
+   echo "$as_me:14511: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
  # The compiler can only warn and ignore the option if not recognized
  # So say no if there are warnings other than the usual output.
@@ -14603,11 +14608,11 @@
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14606: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14611: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
-   echo "$as_me:14610: \$? = $ac_status" >&5
+   echo "$as_me:14615: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
  # The compiler can only warn and ignore the option if not recognized
@@ -17055,7 +17060,7 @@
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext < conftest.$ac_ext <&5)
+   (eval echo "\"\$as_me:19531: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
-   echo "$as_me:19530: \$? = $ac_status" >&5
+   echo "$as_me:19535: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
  # The compiler can only warn and ignore the option if not recognized
  # So say no if there are warnings other than the usual output.
@@ -19627,11 +19632,11 @@
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_com

[llvm-commits] [llvm] r41569 - /llvm/trunk/CREDITS.TXT

2007-08-29 Thread Raul Herbster
Author: raulherbster
Date: Wed Aug 29 11:51:52 2007
New Revision: 41569

URL: http://llvm.org/viewvc/llvm-project?rev=41569&view=rev
Log:
New contributor added

Modified:
llvm/trunk/CREDITS.TXT

Modified: llvm/trunk/CREDITS.TXT
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/CREDITS.TXT?rev=41569&r1=41568&r2=41569&view=diff

==
--- llvm/trunk/CREDITS.TXT (original)
+++ llvm/trunk/CREDITS.TXT Wed Aug 29 11:51:52 2007
@@ -240,4 +240,6 @@
 D: MMX & SSSE3 instructions
 D: SPEC2006 support
 
-
+N: Raul Fernandes Herbster
+E: [EMAIL PROTECTED]
+D: JIT support for ARM


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.0] r41573 - /llvm-gcc-4.0/trunk/gcc/config/i386/i386.h

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Wed Aug 29 12:55:47 2007
New Revision: 41573

URL: http://llvm.org/viewvc/llvm-project?rev=41573&view=rev
Log:
Added missing x86 feature string for 64-bit mode.

Modified:
llvm-gcc-4.0/trunk/gcc/config/i386/i386.h

Modified: llvm-gcc-4.0/trunk/gcc/config/i386/i386.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/i386/i386.h?rev=41573&r1=41572&r2=41573&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/config/i386/i386.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/i386/i386.h Wed Aug 29 12:55:47 2007
@@ -4037,6 +4037,7 @@
   F.setCPU(TARGET_64BIT ? "core2" : "yonah"); \
 else  \
   F.setCPU(ix86_arch_string); \
+if (TARGET_64BIT) F.AddFeature("64bit");  \
 if (TARGET_MMX)   F.AddFeature("mmx");\
 if (TARGET_SSE)   F.AddFeature("sse");\
 if (TARGET_SSE2)  F.AddFeature("sse2");   \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm-gcc-4.0] r41573 - /llvm-gcc-4.0/trunk/gcc/config/i386/i386.h

2007-08-29 Thread Chris Lattner

Thanks Evan, don't forget to apply this to 4.2 also :)

-Chris

On Aug 29, 2007, at 10:55 AM, Evan Cheng wrote:

> Author: evancheng
> Date: Wed Aug 29 12:55:47 2007
> New Revision: 41573
>
> URL: http://llvm.org/viewvc/llvm-project?rev=41573&view=rev
> Log:
> Added missing x86 feature string for 64-bit mode.
>
> Modified:
> llvm-gcc-4.0/trunk/gcc/config/i386/i386.h
>
> Modified: llvm-gcc-4.0/trunk/gcc/config/i386/i386.h
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/ 
> config/i386/i386.h?rev=41573&r1=41572&r2=41573&view=diff
>
> == 
> 
> --- llvm-gcc-4.0/trunk/gcc/config/i386/i386.h (original)
> +++ llvm-gcc-4.0/trunk/gcc/config/i386/i386.h Wed Aug 29 12:55:47 2007
> @@ -4037,6 +4037,7 @@
>F.setCPU(TARGET_64BIT ? "core2" : "yonah"); \
>  else  \
>F.setCPU(ix86_arch_string); \
> +if (TARGET_64BIT) F.AddFeature("64bit");  \
>  if (TARGET_MMX)   F.AddFeature("mmx");\
>  if (TARGET_SSE)   F.AddFeature("sse");\
>  if (TARGET_SSE2)  F.AddFeature("sse2");   \
>
>
> ___
> llvm-commits mailing list
> llvm-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] Trampoline support (pointers nested funtions)

2007-08-29 Thread Evan Cheng

On Aug 28, 2007, at 11:46 AM, Duncan Sands wrote:

> Hi Evan, thanks for your comments.
>
 3. In X86TargetLowering::LowerTRAMPOLINE():
 +case CallingConv::X86_StdCall: {
 +  Move = 0xb9; // Pass chain in ECX

 I assume this is the ModR/M byte?
>>>
>>> Well, it's MOV32ri.
>>
>> Then it should be 0xb8?
>
> It already had ECX or'd in.

Then plz write something like "0xb8 | 1" and comment it so it's more  
clear (to me at least :-).

>
>> Please factor out getX86RegNum() as well. Perhaps put them in
>> X86RegisterInfo.cpp (since lowering really shouldn't depend on
>> codeemitter...) Do getX86RegNum(X86::EAX) rather than make use
>> N86::EAX directly.
> ...
>> Please go through X86InstrInfo to get the opcode numbers instead of
>> hard coding it.
>
> Does the attached patch seem OK?

Yes, thx.

Evan

>
> Ciao,
>
> Duncan.
> 

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] [llvm] r41569 - /llvm/trunk/CREDITS.TXT

2007-08-29 Thread Bill Wendling
On 8/29/07, Raul Herbster <[EMAIL PROTECTED]> wrote:
> --- llvm/trunk/CREDITS.TXT (original)
> +++ llvm/trunk/CREDITS.TXT Wed Aug 29 11:51:52 2007
> @@ -240,4 +240,6 @@
>  D: MMX & SSSE3 instructions
>  D: SPEC2006 support
>
> -
> +N: Raul Fernandes Herbster
> +E: [EMAIL PROTECTED]
> +D: JIT support for ARM
>
Please alphabetize. Thanks!

-bw
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r41575 - /llvm-gcc-4.2/trunk/gcc/config/i386/i386.h

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Wed Aug 29 13:19:23 2007
New Revision: 41575

URL: http://llvm.org/viewvc/llvm-project?rev=41575&view=rev
Log:
Merge -r41572:41573 llvm-gcc-4.0/trunk

Modified:
llvm-gcc-4.2/trunk/gcc/config/i386/i386.h

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.h?rev=41575&r1=41574&r2=41575&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/i386/i386.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.h Wed Aug 29 13:19:23 2007
@@ -3707,6 +3707,7 @@
   F.setCPU(TARGET_64BIT ? "core2" : "yonah"); \
 else  \
   F.setCPU(ix86_arch_string); \
+if (TARGET_64BIT) F.AddFeature("64bit");  \
 if (TARGET_MMX)   F.AddFeature("mmx");\
 if (TARGET_SSE)   F.AddFeature("sse");\
 if (TARGET_SSE2)  F.AddFeature("sse2");   \


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41576 - /llvm/trunk/CREDITS.TXT

2007-08-29 Thread Raul Herbster
Author: raulherbster
Date: Wed Aug 29 13:21:29 2007
New Revision: 41576

URL: http://llvm.org/viewvc/llvm-project?rev=41576&view=rev
Log:
Alphabetize Raul's entry.

Modified:
llvm/trunk/CREDITS.TXT

Modified: llvm/trunk/CREDITS.TXT
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/CREDITS.TXT?rev=41576&r1=41575&r2=41576&view=diff

==
--- llvm/trunk/CREDITS.TXT (original)
+++ llvm/trunk/CREDITS.TXT Wed Aug 29 13:21:29 2007
@@ -105,6 +105,10 @@
 D: Miscellaneous bug fixes
 D: Register allocation refactoring
 
+N: Raul Fernandes Herbster
+E: [EMAIL PROTECTED]
+D: JIT support for ARM
+
 N: Paolo Invernizzi
 E: [EMAIL PROTECTED]
 D: Visual C++ compatibility fixes 
@@ -240,6 +244,3 @@
 D: MMX & SSSE3 instructions
 D: SPEC2006 support
 
-N: Raul Fernandes Herbster
-E: [EMAIL PROTECTED]
-D: JIT support for ARM


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41577 - in /llvm/trunk/lib/Target/X86: X86CodeEmitter.cpp X86CodeEmitter.h X86ISelLowering.cpp X86InstrInfo.h X86RegisterInfo.cpp X86RegisterInfo.h

2007-08-29 Thread Duncan Sands
Author: baldrick
Date: Wed Aug 29 14:01:20 2007
New Revision: 41577

URL: http://llvm.org/viewvc/llvm-project?rev=41577&view=rev
Log:
Move getX86RegNum into X86RegisterInfo and use it
in the trampoline lowering.  Lookup the jump and
mov opcodes for the trampoline rather than hard
coding them.

Removed:
llvm/trunk/lib/Target/X86/X86CodeEmitter.h
Modified:
llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86InstrInfo.h
llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
llvm/trunk/lib/Target/X86/X86RegisterInfo.h

Modified: llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp?rev=41577&r1=41576&r2=41577&view=diff

==
--- llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp Wed Aug 29 14:01:20 2007
@@ -13,7 +13,6 @@
 
//===--===//
 
 #define DEBUG_TYPE "x86-emitter"
-#include "X86CodeEmitter.h"
 #include "X86InstrInfo.h"
 #include "X86Subtarget.h"
 #include "X86TargetMachine.h"
@@ -193,60 +192,8 @@
   MCE.emitWordLE(0); // The relocated value will be added to the displacement
 }
 
-// getX86RegNum - This function maps LLVM register identifiers to their X86
-// specific numbering, which is used in various places encoding instructions.
-//
 unsigned Emitter::getX86RegNum(unsigned RegNo) {
-  switch(RegNo) {
-  case X86::RAX: case X86::EAX: case X86::AX: case X86::AL: return N86::EAX;
-  case X86::RCX: case X86::ECX: case X86::CX: case X86::CL: return N86::ECX;
-  case X86::RDX: case X86::EDX: case X86::DX: case X86::DL: return N86::EDX;
-  case X86::RBX: case X86::EBX: case X86::BX: case X86::BL: return N86::EBX;
-  case X86::RSP: case X86::ESP: case X86::SP: case X86::SPL: case X86::AH:
-return N86::ESP;
-  case X86::RBP: case X86::EBP: case X86::BP: case X86::BPL: case X86::CH:
-return N86::EBP;
-  case X86::RSI: case X86::ESI: case X86::SI: case X86::SIL: case X86::DH:
-return N86::ESI;
-  case X86::RDI: case X86::EDI: case X86::DI: case X86::DIL: case X86::BH:
-return N86::EDI;
-
-  case X86::R8:  case X86::R8D:  case X86::R8W:  case X86::R8B:
-return N86::EAX;
-  case X86::R9:  case X86::R9D:  case X86::R9W:  case X86::R9B:
-return N86::ECX;
-  case X86::R10: case X86::R10D: case X86::R10W: case X86::R10B:
-return N86::EDX;
-  case X86::R11: case X86::R11D: case X86::R11W: case X86::R11B:
-return N86::EBX;
-  case X86::R12: case X86::R12D: case X86::R12W: case X86::R12B:
-return N86::ESP;
-  case X86::R13: case X86::R13D: case X86::R13W: case X86::R13B:
-return N86::EBP;
-  case X86::R14: case X86::R14D: case X86::R14W: case X86::R14B:
-return N86::ESI;
-  case X86::R15: case X86::R15D: case X86::R15W: case X86::R15B:
-return N86::EDI;
-
-  case X86::ST0: case X86::ST1: case X86::ST2: case X86::ST3:
-  case X86::ST4: case X86::ST5: case X86::ST6: case X86::ST7:
-return RegNo-X86::ST0;
-
-  case X86::XMM0:  case X86::XMM1:  case X86::XMM2:  case X86::XMM3:
-  case X86::XMM4:  case X86::XMM5:  case X86::XMM6:  case X86::XMM7:
-return II->getRegisterInfo().getDwarfRegNum(RegNo) -
-   II->getRegisterInfo().getDwarfRegNum(X86::XMM0);
-  case X86::XMM8:  case X86::XMM9:  case X86::XMM10: case X86::XMM11:
-  case X86::XMM12: case X86::XMM13: case X86::XMM14: case X86::XMM15:
-return II->getRegisterInfo().getDwarfRegNum(RegNo) -
-   II->getRegisterInfo().getDwarfRegNum(X86::XMM8);
-
-  default:
-assert(MRegisterInfo::isVirtualRegister(RegNo) &&
-   "Unknown physical register!");
-assert(0 && "Register allocator hasn't allocated reg correctly yet!");
-return 0;
-  }
+  return ((X86RegisterInfo&)II->getRegisterInfo()).getX86RegNum(RegNo);
 }
 
 inline static unsigned char ModRMByte(unsigned Mod, unsigned RegOpcode,

Removed: llvm/trunk/lib/Target/X86/X86CodeEmitter.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CodeEmitter.h?rev=41576&view=auto

==
--- llvm/trunk/lib/Target/X86/X86CodeEmitter.h (original)
+++ llvm/trunk/lib/Target/X86/X86CodeEmitter.h (removed)
@@ -1,25 +0,0 @@
-//===-- X86CodeEmitter.h - X86 DAG Lowering Interface ---*- C++ 
-*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file was developed by Duncan Sands and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===--===//
-//
-// This file defines utilities for X86 code emission.
-//
-//===--===//
-
-#ifndef X86CODEEMITTER_H
-#define X86CODEEMITTER_H
-
-/// N86 namespa

Re: [llvm-commits] Trampoline support (pointers nested funtions)

2007-08-29 Thread Duncan Sands
Hi Evan,

> > It already had ECX or'd in.
> 
> Then plz write something like "0xb8 | 1" and comment it so it's more  
> clear (to me at least :-).

this is from the original version - the version I committed before
the holidays already did 0xb8 | 1, and the version I just committed
does it even better :)

> > Does the attached patch seem OK?
> 
> Yes, thx.

Thanks for the review!  I just committed it.

Ciao,

Duncan.
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41578 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-08-29 Thread Anton Korobeynikov
Author: asl
Date: Wed Aug 29 14:28:29 2007
New Revision: 41578

URL: http://llvm.org/viewvc/llvm-project?rev=41578&view=rev
Log:
Lower FRAME_TO_ADDR_OFFSET to zero by default (if not custom lowered)

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=41578&r1=41577&r2=41578&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Aug 29 14:28:29 2007
@@ -733,7 +733,6 @@
 break;
   case ISD::FRAMEADDR:
   case ISD::RETURNADDR:
-  case ISD::FRAME_TO_ARGS_OFFSET:
 // The only option for these nodes is to custom lower them.  If the target
 // does not custom lower them, then return zero.
 Tmp1 = TLI.LowerOperation(Op, DAG);
@@ -742,6 +741,19 @@
 else
   Result = DAG.getConstant(0, TLI.getPointerTy());
 break;
+  case ISD::FRAME_TO_ARGS_OFFSET:
+MVT::ValueType VT = Node->getValueType(0);
+switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
+default: assert(0 && "This action is not supported yet!");
+case TargetLowering::Custom:
+  Result = TLI.LowerOperation(Op, DAG);
+  if (Result.Val) break;
+  // Fall Thru
+case TargetLowering::Legal:
+  Result = DAG.getConstant(0, VT);
+  break;
+}
+break;
   case ISD::EXCEPTIONADDR: {
 Tmp1 = LegalizeOp(Node->getOperand(0));
 MVT::ValueType VT = Node->getValueType(0);


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41584 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-08-29 Thread Anton Korobeynikov
Author: asl
Date: Wed Aug 29 18:18:48 2007
New Revision: 41584

URL: http://llvm.org/viewvc/llvm-project?rev=41584&view=rev
Log:
Fix use of declaration inside case block

Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=41584&r1=41583&r2=41584&view=diff

==
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Aug 29 18:18:48 2007
@@ -741,7 +741,7 @@
 else
   Result = DAG.getConstant(0, TLI.getPointerTy());
 break;
-  case ISD::FRAME_TO_ARGS_OFFSET:
+  case ISD::FRAME_TO_ARGS_OFFSET: {
 MVT::ValueType VT = Node->getValueType(0);
 switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
 default: assert(0 && "This action is not supported yet!");
@@ -753,6 +753,7 @@
   Result = DAG.getConstant(0, VT);
   break;
 }
+}
 break;
   case ISD::EXCEPTIONADDR: {
 Tmp1 = LegalizeOp(Node->getOperand(0));


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41587 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h include/llvm/CodeGen/SelectionDAGNodes.h include/llvm/Constants.h include/llvm/Target/TargetLowering.h lib/CodeGen/Se

2007-08-29 Thread Dale Johannesen
Author: johannes
Date: Wed Aug 29 19:23:21 2007
New Revision: 41587

URL: http://llvm.org/viewvc/llvm-project?rev=41587&view=rev
Log:
Change LegalFPImmediates to use APFloat.
Add APFloat interfaces to ConstantFP, SelectionDAG.
Fix integer bit in double->APFloat conversion.
Convert LegalizeDAG to use APFloat interface in
ConstantFPSDNode uses.

Modified:
llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
llvm/trunk/include/llvm/Constants.h
llvm/trunk/include/llvm/Target/TargetLowering.h
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/trunk/lib/Support/APFloat.cpp
llvm/trunk/lib/Target/Alpha/AlphaISelLowering.cpp
llvm/trunk/lib/Target/IA64/IA64ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/VMCore/Constants.cpp

Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=41587&r1=41586&r2=41587&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Wed Aug 29 19:23:21 2007
@@ -174,9 +174,14 @@
 return getConstant(Val, VT, true);
   }
   SDOperand getConstantFP(double Val, MVT::ValueType VT, bool isTarget = 
false);
+  SDOperand getConstantFP(const APFloat& Val, MVT::ValueType VT, 
+  bool isTarget = false);
   SDOperand getTargetConstantFP(double Val, MVT::ValueType VT) {
 return getConstantFP(Val, VT, true);
   }
+  SDOperand getTargetConstantFP(const APFloat& Val, MVT::ValueType VT) {
+return getConstantFP(Val, VT, true);
+  }
   SDOperand getGlobalAddress(const GlobalValue *GV, MVT::ValueType VT,
  int offset = 0, bool isTargetGA = false);
   SDOperand getTargetGlobalAddress(const GlobalValue *GV, MVT::ValueType VT,

Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=41587&r1=41586&r2=41587&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Wed Aug 29 19:23:21 2007
@@ -1182,6 +1182,8 @@
   }
   bool isExactlyValue(const APFloat& V) const;
 
+  bool isValueValidForType(MVT::ValueType VT, const APFloat& Val);
+
   static bool classof(const ConstantFPSDNode *) { return true; }
   static bool classof(const SDNode *N) {
 return N->getOpcode() == ISD::ConstantFP || 

Modified: llvm/trunk/include/llvm/Constants.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=41587&r1=41586&r2=41587&view=diff

==
--- llvm/trunk/include/llvm/Constants.h (original)
+++ llvm/trunk/include/llvm/Constants.h Wed Aug 29 19:23:21 2007
@@ -218,12 +218,20 @@
   ConstantFP(const ConstantFP &);  // DO NOT IMPLEMENT
 protected:
   ConstantFP(const Type *Ty, double V);
+  ConstantFP(const Type *Ty, const APFloat& V);
 public:
   /// get() - Static factory methods - Return objects of the specified value
   static ConstantFP *get(const Type *Ty, double V);
+  static ConstantFP *get(const Type *Ty, const APFloat& V);
 
   /// isValueValidForType - return true if Ty is big enough to represent V.
-  static bool isValueValidForType(const Type *Ty, double V);
+  static bool isValueValidForType(const Type *Ty, const APFloat& V);
+  static bool isValueValidForType(const Type *Ty, double V) {
+if (Ty == Type::FloatTy)
+  return isValueValidForType(Ty, APFloat((float)V));
+else
+  return isValueValidForType(Ty, APFloat(V));
+  }
   inline double getValue() const { 
 if (&Val.getSemantics() == &APFloat::IEEEdouble)
   return Val.convertToDouble();
@@ -232,6 +240,7 @@
 else
   assert(0);
   }
+  inline const APFloat& getValueAPF() const { return Val; }
 
   /// isNullValue - Return true if this is the value that would be returned by
   /// getNullValue.  Don't depend on == for doubles to tell us it's zero, it
@@ -242,8 +251,15 @@
   /// it returns true for things that are clearly not equal, like -0.0 and 0.0.
   /// As such, this method can be used to do an exact bit-for-bit comparison of
   /// two floating point values.
-  bool isExactlyValue(double V) const;
-
+  bool isExactlyValue(const APFloat& V) const;
+  bool isExactlyValue(double V) const {
+if (&Val.getSemantics() == &APFloat::IEEEdouble)
+  return isExactlyValue(APFloat(V));
+else if (&Val.getSemantics() == &APFloat::IEEEsingle)
+  return isExactlyValue(APFloat((float)V));
+else
+  assert(0);
+  }
   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static 

[llvm-commits] [llvm] r41590 - /llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp

2007-08-29 Thread Bill Wendling
Author: void
Date: Wed Aug 29 19:59:19 2007
New Revision: 41590

URL: http://llvm.org/viewvc/llvm-project?rev=41590&view=rev
Log:
Use i64 on a PPC64 machine

Modified:
llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp

Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=41590&r1=41589&r2=41590&view=diff

==
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Wed Aug 29 19:59:19 2007
@@ -3466,7 +3466,7 @@
 
   if (isPPC64)
 return DAG.getCopyFromReg(DAG.getEntryNode(), is31 ? PPC::X31 : PPC::X1,
-  MVT::i32);
+  MVT::i64);
   else
 return DAG.getCopyFromReg(DAG.getEntryNode(), is31 ? PPC::R31 : PPC::R1,
   MVT::i32);


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.0] r41593 - /llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp

2007-08-29 Thread Bill Wendling
Author: void
Date: Wed Aug 29 20:10:18 2007
New Revision: 41593

URL: http://llvm.org/viewvc/llvm-project?rev=41593&view=rev
Log:
Enable exception handling by default.

Modified:
llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp

Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp?rev=41593&r1=41592&r2=41593&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Wed Aug 29 20:10:18 2007
@@ -122,9 +122,8 @@
 Args.push_back("--debug-pass=Structure");
   if (flag_debug_pass_arguments)
 Args.push_back("--debug-pass=Arguments");
-// Breaks the x86-darwin build
-//  if (flag_exceptions)
-//Args.push_back("--enable-eh");
+  if (flag_exceptions)
+Args.push_back("--enable-eh");
 
   // If there are options that should be passed through to the LLVM backend
   // directly from the command line, do so now.  This is mainly for debugging


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r41594 - /llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp

2007-08-29 Thread Bill Wendling
Author: void
Date: Wed Aug 29 20:14:03 2007
New Revision: 41594

URL: http://llvm.org/viewvc/llvm-project?rev=41594&view=rev
Log:
Enable EH by default

Modified:
llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=41594&r1=41593&r2=41594&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Wed Aug 29 20:14:03 2007
@@ -123,9 +123,8 @@
 Args.push_back("--debug-pass=Structure");
   if (flag_debug_pass_arguments)
 Args.push_back("--debug-pass=Arguments");
-// Breaks the x86-darwin build
-//  if (flag_exceptions)
-//Args.push_back("--enable-eh");
+  if (flag_exceptions)
+Args.push_back("--enable-eh");
 
   // If there are options that should be passed through to the LLVM backend
   // directly from the command line, do so now.  This is mainly for debugging


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41595 - in /llvm/trunk/lib/Target/X86: X86InstrFPStack.td X86InstrInfo.td X86InstrMMX.td X86InstrSSE.td X86InstrX86-64.td

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Thu Aug 30 00:49:43 2007
New Revision: 41595

URL: http://llvm.org/viewvc/llvm-project?rev=41595&view=rev
Log:
Mark load instructions with isLoad = 1.

Modified:
llvm/trunk/lib/Target/X86/X86InstrFPStack.td
llvm/trunk/lib/Target/X86/X86InstrInfo.td
llvm/trunk/lib/Target/X86/X86InstrMMX.td
llvm/trunk/lib/Target/X86/X86InstrSSE.td
llvm/trunk/lib/Target/X86/X86InstrX86-64.td

Modified: llvm/trunk/lib/Target/X86/X86InstrFPStack.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrFPStack.td?rev=41595&r1=41594&r2=41595&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrFPStack.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrFPStack.td Thu Aug 30 00:49:43 2007
@@ -334,12 +334,14 @@
   "fcmovnu\t{$op, %st(0)|%ST(0), $op}">, DB;
 
 // Floating point loads & stores.
+let isLoad = 1 in {
 def LD_Fp32m   : FpI<(outs RFP32:$dst), (ins f32mem:$src), ZeroArgFP,
   [(set RFP32:$dst, (loadf32 addr:$src))]>;
 def LD_Fp64m   : FpI<(outs RFP64:$dst), (ins f64mem:$src), ZeroArgFP,
   [(set RFP64:$dst, (loadf64 addr:$src))]>;
 def LD_Fp80m   : FpI_<(outs RFP80:$dst), (ins f80mem:$src), ZeroArgFP,
   [(set RFP80:$dst, (loadf80 addr:$src))]>;
+}
 def LD_Fp32m64 : FpI<(outs RFP64:$dst), (ins f32mem:$src), ZeroArgFP,
   [(set RFP64:$dst, (f64 (extloadf32 addr:$src)))]>;
 def LD_Fp64m80 : FpI_<(outs RFP80:$dst), (ins f64mem:$src), ZeroArgFP,

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=41595&r1=41594&r2=41595&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Thu Aug 30 00:49:43 2007
@@ -521,6 +521,7 @@
"mov{l}\t{$src, $dst|$dst, $src}",
[(store (i32 imm:$src), addr:$dst)]>;
 
+let isLoad = 1 in {
 def MOV8rm  : I<0x8A, MRMSrcMem, (outs GR8 :$dst), (ins i8mem :$src),
 "mov{b}\t{$src, $dst|$dst, $src}",
 [(set GR8:$dst, (load addr:$src))]>;
@@ -530,6 +531,7 @@
 def MOV32rm : I<0x8B, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
 "mov{l}\t{$src, $dst|$dst, $src}",
 [(set GR32:$dst, (load addr:$src))]>;
+}
 
 def MOV8mr  : I<0x88, MRMDestMem, (outs), (ins i8mem :$dst, GR8 :$src),
 "mov{b}\t{$src, $dst|$dst, $src}",
@@ -2332,10 +2334,12 @@
 "mov{w}\t{$src, $dst|$dst, $src}", []>, OpSize;
 def MOV32_rr : I<0x89, MRMDestReg, (outs GR32_:$dst), (ins GR32_:$src),
 "mov{l}\t{$src, $dst|$dst, $src}", []>;
+let isLoad = 1 in {
 def MOV16_rm : I<0x8B, MRMSrcMem, (outs GR16_:$dst), (ins i16mem:$src),
 "mov{w}\t{$src, $dst|$dst, $src}", []>, OpSize;
 def MOV32_rm : I<0x8B, MRMSrcMem, (outs GR32_:$dst), (ins i32mem:$src),
 "mov{l}\t{$src, $dst|$dst, $src}", []>;
+}
 def MOV16_mr : I<0x89, MRMDestMem, (outs), (ins i16mem:$dst, GR16_:$src),
 "mov{w}\t{$src, $dst|$dst, $src}", []>, OpSize;
 def MOV32_mr : I<0x89, MRMDestMem, (outs), (ins i32mem:$dst, GR32_:$src),

Modified: llvm/trunk/lib/Target/X86/X86InstrMMX.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrMMX.td?rev=41595&r1=41594&r2=41595&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrMMX.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrMMX.td Thu Aug 30 00:49:43 2007
@@ -157,7 +157,7 @@
 // Data Transfer Instructions
 def MMX_MOVD64rr : MMXI<0x6E, MRMSrcReg, (outs VR64:$dst), (ins GR32:$src),
 "movd\t{$src, $dst|$dst, $src}", []>;
-let isReMaterializable = 1 in
+let isLoad = 1, isReMaterializable = 1 in
 def MMX_MOVD64rm : MMXI<0x6E, MRMSrcMem, (outs VR64:$dst), (ins i32mem:$src),
 "movd\t{$src, $dst|$dst, $src}", []>;
 def MMX_MOVD64mr : MMXI<0x7E, MRMDestMem, (outs), (ins i32mem:$dst, VR64:$src),
@@ -168,7 +168,7 @@
 
 def MMX_MOVQ64rr : MMXI<0x6F, MRMSrcReg, (outs VR64:$dst), (ins VR64:$src),
 "movq\t{$src, $dst|$dst, $src}", []>;
-let isReMaterializable = 1 in
+let isLoad = 1, isReMaterializable = 1 in
 def MMX_MOVQ64rm : MMXI<0x6F, MRMSrcMem, (outs VR64:$dst), (ins i64mem:$src),
 "movq\t{$src, $dst|$dst, $src}",
 [(set VR64:$dst, (load_mmx addr:$src))]>;

Modified: llvm/trunk/lib/Target/X86/X86InstrSSE.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrSSE.td?rev=41595&r1=41594&r2=41595&view=diff

==
--- llvm/trunk/lib/Target/X86/X86InstrSSE.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrSSE.td

[llvm-commits] [llvm] r41596 - /llvm/trunk/include/llvm/CodeGen/MachineInstr.h

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Thu Aug 30 00:50:32 2007
New Revision: 41596

URL: http://llvm.org/viewvc/llvm-project?rev=41596&view=rev
Log:
Added CreateFrameIndex to create a FrameIndex MachineOperand without a 
MachineInstr.

Modified:
llvm/trunk/include/llvm/CodeGen/MachineInstr.h

Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=41596&r1=41595&r2=41596&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Thu Aug 30 00:50:32 2007
@@ -102,6 +102,18 @@
 return Op;
   }
   
+  static MachineOperand CreateFrameIndex(unsigned Idx) {
+MachineOperand Op;
+Op.opType = MachineOperand::MO_FrameIndex;
+Op.contents.immedVal = Idx;
+Op.IsDef = false;
+Op.IsImp = false;
+Op.IsKill = false;
+Op.IsDead = false;
+Op.auxInfo.offset = 0;
+return Op;
+  }
+
   const MachineOperand &operator=(const MachineOperand &MO) {
 contents = MO.contents;
 IsDef= MO.IsDef;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41597 - in /llvm/trunk: include/llvm/CodeGen/LiveIntervalAnalysis.h include/llvm/Target/MRegisterInfo.h lib/Target/ARM/ARMRegisterInfo.h lib/Target/Alpha/AlphaRegisterInfo.h lib

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Thu Aug 30 00:52:20 2007
New Revision: 41597

URL: http://llvm.org/viewvc/llvm-project?rev=41597&view=rev
Log:
Add a variant of foldMemoryOperand to fold any load / store, not just load / 
store from / to stack slots.

Modified:
llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h
llvm/trunk/include/llvm/Target/MRegisterInfo.h
llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h
llvm/trunk/lib/Target/Alpha/AlphaRegisterInfo.h
llvm/trunk/lib/Target/Mips/MipsRegisterInfo.h
llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.h
llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.h

Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=41597&r1=41596&r2=41597&view=diff

==
--- llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h Thu Aug 30 00:52:20 
2007
@@ -242,11 +242,13 @@
 bool isReMaterializable(const LiveInterval &li, const VNInfo *ValNo,
 MachineInstr *MI);
 
-/// tryFoldMemoryOperand - Attempts to fold a spill / restore from slot
-/// to reg into ith operand of specified MI. If it is successul, MI is
-/// updated with the newly created MI and returns true.
-bool tryFoldMemoryOperand(MachineInstr* &MI, VirtRegMap &vrm, unsigned 
index,
-  unsigned i, int slot, unsigned reg);
+/// tryFoldMemoryOperand - Attempts to fold either a spill / restore from
+/// slot / to reg or any rematerialized load into ith operand of specified
+/// MI. If it is successul, MI is updated with the newly created MI and
+/// returns true.
+bool tryFoldMemoryOperand(MachineInstr* &MI, VirtRegMap &vrm,
+  unsigned index, unsigned i, bool isSS,
+  MachineInstr *DefMI, int slot, unsigned reg);
 
 static LiveInterval createInterval(unsigned Reg);
 

Modified: llvm/trunk/include/llvm/Target/MRegisterInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/MRegisterInfo.h?rev=41597&r1=41596&r2=41597&view=diff

==
--- llvm/trunk/include/llvm/Target/MRegisterInfo.h (original)
+++ llvm/trunk/include/llvm/Target/MRegisterInfo.h Thu Aug 30 00:52:20 2007
@@ -521,6 +521,15 @@
 return 0;
   }
 
+  /// foldMemoryOperand - Same as the previous version except it allows folding
+  /// of any load and store from / to any address, not just from a specific
+  /// stack slot.
+  virtual MachineInstr* foldMemoryOperand(MachineInstr* MI,
+  unsigned OpNum,
+  MachineInstr* LoadMI) const {
+return 0;
+  }
+
   /// targetHandlesStackFrameRounding - Returns true if the target is 
responsible
   /// for rounding up the stack frame (probably at emitPrologue time).
   virtual bool targetHandlesStackFrameRounding() const {

Modified: llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h?rev=41597&r1=41596&r2=41597&view=diff

==
--- llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h (original)
+++ llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h Thu Aug 30 00:52:20 2007
@@ -66,6 +66,11 @@
   MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum,
   int FrameIndex) const;
 
+  MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum,
+  MachineInstr* LoadMI) const {
+return 0;
+  }
+
   const unsigned *getCalleeSavedRegs(const MachineFunction *MF = 0) const;
 
   const TargetRegisterClass* const*

Modified: llvm/trunk/lib/Target/Alpha/AlphaRegisterInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaRegisterInfo.h?rev=41597&r1=41596&r2=41597&view=diff

==
--- llvm/trunk/lib/Target/Alpha/AlphaRegisterInfo.h (original)
+++ llvm/trunk/lib/Target/Alpha/AlphaRegisterInfo.h Thu Aug 30 00:52:20 2007
@@ -41,6 +41,11 @@
   MachineInstr* foldMemoryOperand(MachineInstr *MI, unsigned OpNum, 
   int FrameIndex) const;
 
+  MachineInstr* foldMemoryOperand(MachineInstr* MI, unsigned OpNum,
+  MachineInstr* LoadMI) const {
+return 0;
+  }
+
   void copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
 unsigned DestReg, unsigned SrcReg,
 const TargetRegisterClass *RC) const;

Modified: llvm/trunk/lib/Target/Mips/MipsRegisterInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsRegi

[llvm-commits] [llvm] r41598 - /llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Thu Aug 30 00:53:02 2007
New Revision: 41598

URL: http://llvm.org/viewvc/llvm-project?rev=41598&view=rev
Log:
Try fold re-materialized load instructions into its uses.

Modified:
llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=41598&r1=41597&r2=41598&view=diff

==
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Thu Aug 30 00:53:02 2007
@@ -236,10 +236,17 @@
   return true;
 }
 
+/// tryFoldMemoryOperand - Attempts to fold either a spill / restore from
+/// slot / to reg or any rematerialized load into ith operand of specified
+/// MI. If it is successul, MI is updated with the newly created MI and
+/// returns true.
 bool LiveIntervals::tryFoldMemoryOperand(MachineInstr* &MI, VirtRegMap &vrm,
  unsigned index, unsigned i,
+ bool isSS, MachineInstr *DefMI,
  int slot, unsigned reg) {
-  MachineInstr *fmi = mri_->foldMemoryOperand(MI, i, slot);
+  MachineInstr *fmi = isSS
+? mri_->foldMemoryOperand(MI, i, slot)
+: mri_->foldMemoryOperand(MI, i, DefMI);
   if (fmi) {
 // Attempt to fold the memory reference into the instruction. If
 // we can do this, we don't need to insert spill code.
@@ -340,6 +347,8 @@
 bool CanDelete = ReMatDelete[I->valno->id];
 int LdSlot = 0;
 bool isLoadSS = DefIsReMat && tii_->isLoadFromStackSlot(DefMI, LdSlot);
+bool isLoad = isLoadSS ||
+  (DefIsReMat && (DefMI->getInstrDescriptor()->Flags & M_LOAD_FLAG));
 unsigned index = getBaseIndex(I->start);
 unsigned end = getBaseIndex(I->end-1) + InstrSlots::NUM;
 for (; index != end; index += InstrSlots::NUM) {
@@ -362,20 +371,22 @@
 RemoveMachineInstrFromMaps(MI);
 MI->eraseFromParent();
 break;
-  } else if (tryFoldMemoryOperand(MI, vrm, index, i, slot, li.reg))
+  } else if (tryFoldMemoryOperand(MI, vrm, index, i, true,
+  DefMI, slot, li.reg)) {
 // Folding the load/store can completely change the instruction
 // in unpredictable ways, rescan it from the beginning.
 goto RestartInstruction;
-} else if (isLoadSS &&
-   tryFoldMemoryOperand(MI, vrm, index, i, LdSlot, 
li.reg)){
-  // FIXME: Other rematerializable loads can be folded as well.
-  // Folding the load/store can completely change the
-  // instruction in unpredictable ways, rescan it from
-  // the beginning.
-  goto RestartInstruction;
-}
+  }
+} else if (isLoad &&
+   tryFoldMemoryOperand(MI, vrm, index, i, isLoadSS,
+DefMI, LdSlot, li.reg))
+// Folding the load/store can completely change the
+// instruction in unpredictable ways, rescan it from
+// the beginning.
+goto RestartInstruction;
   } else {
-if (tryFoldMemoryOperand(MI, vrm, index, i, slot, li.reg))
+if (tryFoldMemoryOperand(MI,  vrm, index, i, true, DefMI,
+ slot, li.reg))
   // Folding the load/store can completely change the instruction 
in
   // unpredictable ways, rescan it from the beginning.
   goto RestartInstruction;


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm] r41599 - in /llvm/trunk: lib/Target/X86/X86RegisterInfo.cpp lib/Target/X86/X86RegisterInfo.h test/CodeGen/X86/constant-pool-remat-0.ll

2007-08-29 Thread Evan Cheng
Author: evancheng
Date: Thu Aug 30 00:54:07 2007
New Revision: 41599

URL: http://llvm.org/viewvc/llvm-project?rev=41599&view=rev
Log:
Added support to fold X86 load / store instructions. This allow rematerialized 
loads to be folded into their uses.

Modified:
llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
llvm/trunk/lib/Target/X86/X86RegisterInfo.h
llvm/trunk/test/CodeGen/X86/constant-pool-remat-0.ll

Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=41599&r1=41598&r2=41599&view=diff

==
--- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Thu Aug 30 00:54:07 2007
@@ -270,63 +270,81 @@
   MBB.insert(I, MI);
 }
 
-static MachineInstr *FuseTwoAddrInst(unsigned Opcode, unsigned FrameIndex,
- MachineInstr *MI,
- const TargetInstrInfo &TII) {
+static const MachineInstrBuilder &FuseInstrAddOperand(MachineInstrBuilder &MIB,
+  MachineOperand &MO) {
+  if (MO.isReg())
+MIB = MIB.addReg(MO.getReg(), MO.isDef(), MO.isImplicit());
+  else if (MO.isImm())
+MIB = MIB.addImm(MO.getImm());
+  else if (MO.isFrameIndex())
+MIB = MIB.addFrameIndex(MO.getFrameIndex());
+  else if (MO.isGlobalAddress())
+MIB = MIB.addGlobalAddress(MO.getGlobal(), MO.getOffset());
+  else if (MO.isConstantPoolIndex())
+MIB = MIB.addConstantPoolIndex(MO.getConstantPoolIndex(), MO.getOffset());
+  else if (MO.isJumpTableIndex())
+MIB = MIB.addJumpTableIndex(MO.getJumpTableIndex());
+  else if (MO.isExternalSymbol())
+MIB = MIB.addExternalSymbol(MO.getSymbolName());
+  else
+assert(0 && "Unknown operand for FuseInst!");
+
+  return MIB;
+}
+
+static MachineInstr *FuseTwoAddrInst(unsigned Opcode,
+ SmallVector &MOs,
+ MachineInstr *MI, const TargetInstrInfo &TII) 
{
   unsigned NumOps = TII.getNumOperands(MI->getOpcode())-2;
+
   // Create the base instruction with the memory operand as the first part.
-  MachineInstrBuilder MIB = addFrameReference(BuildMI(TII.get(Opcode)),
-  FrameIndex);
+  MachineInstrBuilder MIB = BuildMI(TII.get(Opcode));
+  unsigned NumAddrOps = MOs.size();
+  for (unsigned i = 0; i != NumAddrOps; ++i)
+MIB = FuseInstrAddOperand(MIB, MOs[i]);
+  if (NumAddrOps < 4)  // FrameIndex only
+MIB.addImm(1).addReg(0).addImm(0);
   
   // Loop over the rest of the ri operands, converting them over.
   for (unsigned i = 0; i != NumOps; ++i) {
 MachineOperand &MO = MI->getOperand(i+2);
-if (MO.isReg())
-  MIB = MIB.addReg(MO.getReg(), false, MO.isImplicit());
-else if (MO.isImm())
-  MIB = MIB.addImm(MO.getImm());
-else if (MO.isGlobalAddress())
-  MIB = MIB.addGlobalAddress(MO.getGlobal(), MO.getOffset());
-else if (MO.isJumpTableIndex())
-  MIB = MIB.addJumpTableIndex(MO.getJumpTableIndex());
-else if (MO.isExternalSymbol())
-  MIB = MIB.addExternalSymbol(MO.getSymbolName());
-else
-  assert(0 && "Unknown operand type!");
+MIB = FuseInstrAddOperand(MIB, MO);
   }
   return MIB;
 }
 
 static MachineInstr *FuseInst(unsigned Opcode, unsigned OpNo,
-  unsigned FrameIndex, MachineInstr *MI,
-  const TargetInstrInfo &TII) {
+  SmallVector &MOs,
+  MachineInstr *MI, const TargetInstrInfo &TII) {
   MachineInstrBuilder MIB = BuildMI(TII.get(Opcode));
   
   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
 MachineOperand &MO = MI->getOperand(i);
 if (i == OpNo) {
   assert(MO.isReg() && "Expected to fold into reg operand!");
-  MIB = addFrameReference(MIB, FrameIndex);
-} else if (MO.isReg())
-  MIB = MIB.addReg(MO.getReg(), MO.isDef(), MO.isImplicit());
-else if (MO.isImm())
-  MIB = MIB.addImm(MO.getImm());
-else if (MO.isGlobalAddress())
-  MIB = MIB.addGlobalAddress(MO.getGlobal(), MO.getOffset());
-else if (MO.isJumpTableIndex())
-  MIB = MIB.addJumpTableIndex(MO.getJumpTableIndex());
-else if (MO.isExternalSymbol())
-  MIB = MIB.addExternalSymbol(MO.getSymbolName());
-else
-  assert(0 && "Unknown operand for FuseInst!");
+  unsigned NumAddrOps = MOs.size();
+  for (unsigned i = 0; i != NumAddrOps; ++i)
+MIB = FuseInstrAddOperand(MIB, MOs[i]);
+  if (NumAddrOps < 4)  // FrameIndex only
+MIB.addImm(1).addReg(0).addImm(0);
+} else {
+  MIB = FuseInstrAddOperand(MIB, MO);
+}
   }
   return MIB;
 }
 
-static MachineInstr *MakeM0Inst(const TargetInstrInfo &TII,
-unsigned Opcode, unsigned FrameIndex,
+static MachineInstr

Re: [llvm-commits] [llvm] r40736 - in /llvm/trunk: lib/Target/X86/X86InstrMMX.td lib/Target/X86/X86InstrSSE.td test/CodeGen/X86/constant-pool-remat-0.ll

2007-08-29 Thread Evan Cheng
This is done. Now we emit this:

_array:
 subq$8, %rsp
 mulss   LCPI1_0(%rip), %xmm0
 call_qux
 mulss   LCPI1_0(%rip), %xmm0
 addq$8, %rsp
 ret

Evan

On Aug 2, 2007, at 8:50 AM, Chris Lattner wrote:

>> Mark the SSE and MMX load instructions that
>> X86InstrInfo::isReallyTriviallyReMaterializable knows how to handle
>> with the isReMaterializable flag so that it is given a chance to
>> handle
>> them. Without hoisting constant-pool loads from loops this isn't very
>> visible, though it does keep CodeGen/X86/constant-pool-remat-0.ll  
>> from
>> making a copy of the constant pool on the stack.
>>
>> @@ -0,0 +1,10 @@
>> +; RUN: llvm-as < %s | llc -march=x86-64 | grep LCPI | wc -l | grep 3
>> +
>> +declare float @qux(float %y)
>> +
>> +define float @array(float %a) {
>> +  %n = mul float %a, 9.0
>> +  %m = call float @qux(float %n)
>> +  %o = mul float %m, 9.0
>> +  ret float %o
>> +}
>
> Interesting testcase.  I'm now getting:
>
> _array:
>  subq$8, %rsp
>  movss   LCPI1_0(%rip), %xmm1
>  mulss   %xmm1, %xmm0
>  call_qux
>  movss   LCPI1_0(%rip), %xmm1
>  mulss   %xmm1, %xmm0
>  addq$8, %rsp
>  ret
>
> for this.  Both loads should be folded into the mulss's.  Because the
> load is shared at isel time, this can't be done there, but it can be
> done after the remat.  Maybe the register allocator needs to call
> MRegisterInfo::foldMemoryOperand if the remat is a load that has a
> single use?
>
> -Chris
> ___
> llvm-commits mailing list
> llvm-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits