[llvm-commits] [llvm] r106134 - in /llvm/trunk: lib/Transforms/Scalar/SimplifyLibCalls.cpp test/Transforms/SimplifyLibCalls/PR7357.ll

Rafael Espindola rafael.espindola at gmail.com
Wed Jun 16 12:34:01 PDT 2010


Author: rafael
Date: Wed Jun 16 14:34:01 2010
New Revision: 106134

URL: http://llvm.org/viewvc/llvm-project?rev=106134&view=rev
Log:
Make sure that simplify libcalls does not replace a call with one calling
convention with a new call with a different calling convention.

Added:
    llvm/trunk/test/Transforms/SimplifyLibCalls/PR7357.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp?rev=106134&r1=106133&r2=106134&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp Wed Jun 16 14:34:01 2010
@@ -66,6 +66,11 @@
     this->TD = TD;
     if (CI->getCalledFunction())
       Context = &CI->getCalledFunction()->getContext();
+
+    // We never change the calling convention.
+    if (CI->getCallingConv() != llvm::CallingConv::C)
+      return NULL;
+
     return CallOptimizer(CI->getCalledFunction(), CI, B);
   }
 };

Added: llvm/trunk/test/Transforms/SimplifyLibCalls/PR7357.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyLibCalls/PR7357.ll?rev=106134&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyLibCalls/PR7357.ll (added)
+++ llvm/trunk/test/Transforms/SimplifyLibCalls/PR7357.ll Wed Jun 16 14:34:01 2010
@@ -0,0 +1,16 @@
+; RUN: opt < %s -default-data-layout="e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32" -simplify-libcalls -S | FileCheck %s
+ at .str1 = private constant [11 x i8] c"(){};[]&|:\00", align 4
+
+; check that simplify libcalls will not replace a call with one calling
+; convention with a new call with a different calling convention.
+
+; CHECK: define arm_aapcscc i32 @foo(i32 %argc)
+; CHECK: call arm_aapcscc  i8* @strchr
+define arm_aapcscc i32 @foo(i32 %argc) nounwind {
+bb.nph:
+  call arm_aapcscc  i8* @strchr(i8* getelementptr ([11 x i8]* @.str1, i32 0,
+i32 0), i32 %argc) nounwind readonly
+  ret i32 0
+}
+
+declare arm_aapcscc i8* @strchr(i8*, i32) nounwind readonly





More information about the llvm-commits mailing list