[MergeFunc] Add tests showing incorrect handling of metadata call args.
diff --git a/llvm/test/Transforms/MergeFunc/metadata-call-arguments.ll b/llvm/test/Transforms/MergeFunc/metadata-call-arguments.ll
new file mode 100644
index 0000000..2826374
--- /dev/null
+++ b/llvm/test/Transforms/MergeFunc/metadata-call-arguments.ll
@@ -0,0 +1,102 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs --version 5
+; RUN: opt -p mergefunc -S %s | FileCheck %s
+
+; FIXME: Should not be merged with @call_mdtuple_arg_not_equal_2.
+define i64 @call_mdtuple_arg_not_equal_1() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !0)
+  ret i64 %r
+}
+
+define i64 @call_mdtuple_arg_not_equal_2() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !1)
+  ret i64 %r
+}
+
+define i64 @call_mdtuple_arg_with_cycle_equal_1() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !2)
+  ret i64 %r
+}
+
+define i64 @call_mdtuple_arg_with_cycle_equal_2() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !3)
+  ret i64 %r
+}
+
+; FIXME: Should not be merged with @call_mdtuple_arg_with_cycle_not_equal_2.
+define i64 @call_mdtuple_arg_with_cycle_not_equal_1() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !3)
+  ret i64 %r
+}
+
+define i64 @call_mdtuple_arg_with_cycle_not_equal_2() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !4)
+  ret i64 %r
+}
+
+define i64 @call_mdtuple_arg_equal_1() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !5)
+  ret i64 %r
+}
+
+define i64 @call_mdtuple_arg_equal_2() {
+  %r = call i64 @llvm.read_volatile_register.i64(metadata !6)
+  ret i64 %r
+}
+
+declare i64 @llvm.read_volatile_register.i64(metadata)
+
+!0 = !{!"foo"}
+!1 = !{!"bar"}
+
+!2 = distinct !{!2, !"foo"}
+!3 = distinct !{!3, !"foo"}
+
+!4 = distinct !{!4, !"bar"}
+
+!5 = !{!"foo", i64 10}
+!6 = !{!"foo", i64 10}
+; CHECK-LABEL: define i64 @call_mdtuple_arg_with_cycle_equal_1() {
+; CHECK-NEXT:    [[R:%.*]] = call i64 @llvm.read_volatile_register.i64(metadata [[META0:![0-9]+]])
+; CHECK-NEXT:    ret i64 [[R]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_with_cycle_equal_2() {
+; CHECK-NEXT:    [[R:%.*]] = call i64 @llvm.read_volatile_register.i64(metadata [[META1:![0-9]+]])
+; CHECK-NEXT:    ret i64 [[R]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_with_cycle_not_equal_1() {
+; CHECK-NEXT:    [[R:%.*]] = call i64 @llvm.read_volatile_register.i64(metadata [[META1]])
+; CHECK-NEXT:    ret i64 [[R]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_with_cycle_not_equal_2() {
+; CHECK-NEXT:    [[R:%.*]] = call i64 @llvm.read_volatile_register.i64(metadata [[META2:![0-9]+]])
+; CHECK-NEXT:    ret i64 [[R]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_equal_1() {
+; CHECK-NEXT:    [[R:%.*]] = call i64 @llvm.read_volatile_register.i64(metadata [[META3:![0-9]+]])
+; CHECK-NEXT:    ret i64 [[R]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_not_equal_2() {
+; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @call_mdtuple_arg_equal_1()
+; CHECK-NEXT:    ret i64 [[TMP1]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_not_equal_1() {
+; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @call_mdtuple_arg_equal_1()
+; CHECK-NEXT:    ret i64 [[TMP1]]
+;
+;
+; CHECK-LABEL: define i64 @call_mdtuple_arg_equal_2() {
+; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @call_mdtuple_arg_equal_1()
+; CHECK-NEXT:    ret i64 [[TMP1]]
+;
+;.
+; CHECK: [[META0]] = distinct !{[[META0]], !"foo"}
+; CHECK: [[META1]] = distinct !{[[META1]], !"foo"}
+; CHECK: [[META2]] = distinct !{[[META2]], !"bar"}
+; CHECK: [[META3]] = !{!"foo", i64 10}
+;.