diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index e78eef6..54b8bd3 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -1205,9 +1205,9 @@
           if (Function *F = CI->getCalledFunction())
             switch (F->getIntrinsicID()) {
             case Intrinsic::not_intrinsic:
-            case Intrinsic::va_start:
-            case Intrinsic::va_copy:
-            case Intrinsic::va_end:
+            case Intrinsic::vastart:
+            case Intrinsic::vacopy:
+            case Intrinsic::vaend:
             case Intrinsic::returnaddress:
             case Intrinsic::frameaddress:
             case Intrinsic::setjmp:
@@ -1234,7 +1234,7 @@
     if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID()) {
       switch (ID) {
       default: assert(0 && "Unknown LLVM intrinsic!");
-      case Intrinsic::va_start: 
+      case Intrinsic::vastart: 
         Out << "0; ";
         
         Out << "va_start(*(va_list*)&" << Mang->getValueName(&I) << ", ";
@@ -1248,12 +1248,12 @@
         writeOperand(&I.getParent()->getParent()->aback());
         Out << ")";
         return;
-      case Intrinsic::va_end:
+      case Intrinsic::vaend:
         Out << "va_end(*(va_list*)&";
         writeOperand(I.getOperand(1));
         Out << ")";
         return;
-      case Intrinsic::va_copy:
+      case Intrinsic::vacopy:
         Out << "0;";
         Out << "va_copy(*(va_list*)&" << Mang->getValueName(&I) << ", ";
         Out << "*(va_list*)&";
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp
index e78eef6..54b8bd3 100644
--- a/lib/Target/CBackend/Writer.cpp
+++ b/lib/Target/CBackend/Writer.cpp
@@ -1205,9 +1205,9 @@
           if (Function *F = CI->getCalledFunction())
             switch (F->getIntrinsicID()) {
             case Intrinsic::not_intrinsic:
-            case Intrinsic::va_start:
-            case Intrinsic::va_copy:
-            case Intrinsic::va_end:
+            case Intrinsic::vastart:
+            case Intrinsic::vacopy:
+            case Intrinsic::vaend:
             case Intrinsic::returnaddress:
             case Intrinsic::frameaddress:
             case Intrinsic::setjmp:
@@ -1234,7 +1234,7 @@
     if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID()) {
       switch (ID) {
       default: assert(0 && "Unknown LLVM intrinsic!");
-      case Intrinsic::va_start: 
+      case Intrinsic::vastart: 
         Out << "0; ";
         
         Out << "va_start(*(va_list*)&" << Mang->getValueName(&I) << ", ";
@@ -1248,12 +1248,12 @@
         writeOperand(&I.getParent()->getParent()->aback());
         Out << ")";
         return;
-      case Intrinsic::va_end:
+      case Intrinsic::vaend:
         Out << "va_end(*(va_list*)&";
         writeOperand(I.getOperand(1));
         Out << ")";
         return;
-      case Intrinsic::va_copy:
+      case Intrinsic::vacopy:
         Out << "0;";
         Out << "va_copy(*(va_list*)&" << Mang->getValueName(&I) << ", ";
         Out << "*(va_list*)&";
diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
index 4ddc4ed..5441ae4 100644
--- a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
+++ b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp
@@ -126,13 +126,10 @@
       if (CallInst *CI = dyn_cast<CallInst>(I++))
         if (Function *F = CI->getCalledFunction())
           switch (F->getIntrinsicID()) {
-#undef va_start
-#undef va_copy
-#undef va_end
           case Intrinsic::not_intrinsic:
-          case Intrinsic::va_start:
-          case Intrinsic::va_copy:
-          case Intrinsic::va_end:
+          case Intrinsic::vastart:
+          case Intrinsic::vacopy:
+          case Intrinsic::vaend:
             // We directly implement these intrinsics.  Note that this knowledge
             // is incestuously entangled with the code in
             // SparcInstrSelection.cpp and must be updated when it is updated.
diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
index 8ca4e69..5a0d863 100644
--- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp
+++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
@@ -1398,7 +1398,7 @@
   switch (iid) {
   default:
     assert(0 && "Unknown intrinsic function call should have been lowered!");
-  case Intrinsic::va_start: {
+  case Intrinsic::vastart: {
     // Get the address of the first incoming vararg argument on the stack
     bool ignore;
     Function* func = cast<Function>(callInstr.getParent()->getParent());
@@ -1412,10 +1412,10 @@
     return true;
   }
 
-  case Intrinsic::va_end:
+  case Intrinsic::vaend:
     return true;                        // no-op on SparcV9
 
-  case Intrinsic::va_copy:
+  case Intrinsic::vacopy:
     // Simple copy of current va_list (arg1) to new va_list (result)
     mvec.push_back(BuildMI(V9::ORr, 3).
                    addMReg(target.getRegInfo().getZeroRegNum()).
diff --git a/lib/Target/X86/InstSelectSimple.cpp b/lib/Target/X86/InstSelectSimple.cpp
index f3bbf0b..e15da38 100644
--- a/lib/Target/X86/InstSelectSimple.cpp
+++ b/lib/Target/X86/InstSelectSimple.cpp
@@ -1242,9 +1242,9 @@
         if (Function *F = CI->getCalledFunction())
           switch (F->getIntrinsicID()) {
           case Intrinsic::not_intrinsic:
-          case Intrinsic::va_start:
-          case Intrinsic::va_copy:
-          case Intrinsic::va_end:
+          case Intrinsic::vastart:
+          case Intrinsic::vacopy:
+          case Intrinsic::vaend:
           case Intrinsic::returnaddress:
           case Intrinsic::frameaddress:
           case Intrinsic::memcpy:
diff --git a/lib/Target/X86/X86ISelSimple.cpp b/lib/Target/X86/X86ISelSimple.cpp
index f3bbf0b..e15da38 100644
--- a/lib/Target/X86/X86ISelSimple.cpp
+++ b/lib/Target/X86/X86ISelSimple.cpp
@@ -1242,9 +1242,9 @@
         if (Function *F = CI->getCalledFunction())
           switch (F->getIntrinsicID()) {
           case Intrinsic::not_intrinsic:
-          case Intrinsic::va_start:
-          case Intrinsic::va_copy:
-          case Intrinsic::va_end:
+          case Intrinsic::vastart:
+          case Intrinsic::vacopy:
+          case Intrinsic::vaend:
           case Intrinsic::returnaddress:
           case Intrinsic::frameaddress:
           case Intrinsic::memcpy:
