[PATCH] D46495: Fix assertion in FunctionComparator::cmpInlineAsm

whitequark via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu May 10 08:09:38 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL331990: [PR37339] Fix assertion in FunctionComparator::cmpInlineAsm (authored by whitequark, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D46495?vs=145892&id=146128#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D46495

Files:
  llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp
  llvm/trunk/test/Transforms/MergeFunc/inline-asm.ll


Index: llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp
+++ llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp
@@ -710,7 +710,7 @@
     return Res;
   if (int Res = cmpNumbers(L->getDialect(), R->getDialect()))
     return Res;
-  llvm_unreachable("InlineAsm blocks were not uniqued.");
+  assert(L->getFunctionType() != R->getFunctionType());
   return 0;
 }
 
Index: llvm/trunk/test/Transforms/MergeFunc/inline-asm.ll
===================================================================
--- llvm/trunk/test/Transforms/MergeFunc/inline-asm.ll
+++ llvm/trunk/test/Transforms/MergeFunc/inline-asm.ll
@@ -0,0 +1,53 @@
+; RUN: opt -mergefunc -S < %s | FileCheck %s
+
+; CHECK-LABEL: @int_ptr_arg_different
+; CHECK-NEXT: call void asm
+
+; CHECK-LABEL: @int_ptr_arg_same
+; CHECK-NEXT: %2 = bitcast i32* %0 to float*
+; CHECK-NEXT: tail call void @float_ptr_arg_same(float* %2)
+
+; CHECK-LABEL: @int_ptr_null
+; CHECK-NEXT: tail call void @float_ptr_null()
+
+; Used to satisfy minimum size limit
+declare void @stuff()
+
+; Can be merged
+define void @float_ptr_null() {
+  call void asm "nop", "r"(float* null)
+  call void @stuff()
+  ret void
+}
+
+define void @int_ptr_null() {
+  call void asm "nop", "r"(i32* null)
+  call void @stuff()
+  ret void
+}
+
+; Can be merged (uses same argument differing by pointer type)
+define void @float_ptr_arg_same(float*) {
+  call void asm "nop", "r"(float* %0)
+  call void @stuff()
+  ret void
+}
+
+define void @int_ptr_arg_same(i32*) {
+  call void asm "nop", "r"(i32* %0)
+  call void @stuff()
+  ret void
+}
+
+; Can not be merged (uses different arguments)
+define void @float_ptr_arg_different(float*, float*) {
+  call void asm "nop", "r"(float* %0)
+  call void @stuff()
+  ret void
+}
+
+define void @int_ptr_arg_different(i32*, i32*) {
+  call void asm "nop", "r"(i32* %1)
+  call void @stuff()
+  ret void
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46495.146128.patch
Type: text/x-patch
Size: 2001 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180510/7dab8ca8/attachment.bin>


More information about the llvm-commits mailing list