[PATCH] D136397: [Clang] Change AnonStructIds in MangleContext to per-function based
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. xur marked an inline comment as done. Closed by commit rG6cee5393371f: [Clang] Change AnonStructIds in MangleContext to per-function based (authored by xur). Herald added a project: clang. Changed prior to commit: https://reviews.llvm.org/D136397?vs=469415=470052#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D136397/new/ https://reviews.llvm.org/D136397 Files: clang/include/clang/AST/Mangle.h clang/lib/AST/ItaniumMangle.cpp clang/test/CodeGen/attr-function-return.cpp clang/test/CodeGenCXX/catch-undef-behavior.cpp clang/test/CodeGenCXX/cxx1y-init-captures-eh.cpp clang/test/CodeGenCXX/cxx1y-init-captures.cpp clang/test/CodeGenCXX/lambda-expressions-nested-linkage.cpp clang/test/CodeGenCXX/lambda-expressions.cpp clang/test/CodeGenCXX/mangle-lambdas.cpp clang/test/CodeGenCXX/nrvo.cpp clang/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm clang/test/CodeGenObjCXX/block-nested-in-lambda.mm clang/test/CodeGenObjCXX/lambda-expressions.mm clang/test/CodeGenObjCXX/property-lvalue-lambda.mm Index: clang/test/CodeGenObjCXX/property-lvalue-lambda.mm === --- clang/test/CodeGenObjCXX/property-lvalue-lambda.mm +++ clang/test/CodeGenObjCXX/property-lvalue-lambda.mm @@ -36,12 +36,12 @@ // [x setBlk: operator+([x blk], [] {})] // CHECK: call void{{.*}}@objc_msgSend{{.*}} - // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_2EU13block_pointerFvvES4_T_" + // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_0EU13block_pointerFvvES4_T_" // CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} [[PLUS]]) x.blk += [] {}; // CHECK: call void{{.*}}@objc_msgSend{{.*}} - // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_3EPFvvES4_T_" + // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_1EPFvvES4_T_" // CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} [[PLUS]]) x.fnptr += [] {}; } Index: clang/test/CodeGenObjCXX/lambda-expressions.mm === --- clang/test/CodeGenObjCXX/lambda-expressions.mm +++ clang/test/CodeGenObjCXX/lambda-expressions.mm @@ -38,7 +38,7 @@ // ARC: call i8* @llvm.objc.retainBlock // ARC: call void @llvm.objc.release // ARC-LABEL: define internal noundef i32 @___Z2f2v_block_invoke -// ARC: call noundef i32 @"_ZZ2f2vENK3$_1clEv +// ARC: call noundef i32 @"_ZZ2f2vENK3$_0clEv template void take_lambda(T &) { lambda(); } void take_block(void (^block)()) { block(); } @@ -66,7 +66,7 @@ // ARC: %[[CAPTURE0:.*]] = getelementptr inbounds %[[LAMBDACLASS]], %[[LAMBDACLASS]]* %{{.*}}, i32 0, i32 0 // ARC: store i32 %{{.*}}, i32* %[[CAPTURE0]] -// ARC: define internal void @"_ZZN13LambdaCapture4foo1ERiENK3$_3clEv"(%[[LAMBDACLASS]]* {{[^,]*}} %{{.*}}) +// ARC: define internal void @"_ZZN13LambdaCapture4foo1ERiENK3$_0clEv"(%[[LAMBDACLASS]]* {{[^,]*}} %{{.*}}) // ARC: %[[BLOCK:.*]] = alloca <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }> // ARC: %[[CAPTURE1:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>, <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>* %[[BLOCK]], i32 0, i32 5 // ARC: store i32 %{{.*}}, i32* %[[CAPTURE1]] @@ -75,11 +75,11 @@ // ARC-NOT: @llvm.objc.storeStrong( // ARC: ret void -// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_3clEv_block_invoke" +// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_0clEv_block_invoke" // ARC: %[[CAPTURE2:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>, <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>* %{{.*}}, i32 0, i32 5 // ARC: store i32 %{{.*}}, i32* %[[CAPTURE2]] -// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_3clEv_block_invoke_2"(i8* noundef %{{.*}}) +// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_0clEv_block_invoke_2"(i8* noundef %{{.*}}) // ARC: %[[CAPTURE3:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>, <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>* %{{.*}}, i32 0, i32 5 // ARC: %[[V1:.*]] = load i32, i32* %[[CAPTURE3]] // ARC: store i32 %[[V1]], i32* @_ZN13LambdaCapture1iE @@ -141,11 +141,11 @@ // Check that the delegating invoke function doesn't destruct the Weak object // that is passed. -// ARC-LABEL: define internal void @"_ZZN14LambdaDelegate4testEvEN3$_58__invokeENS_4WeakE"( -// ARC: call void @"_ZZN14LambdaDelegate4testEvENK3$_5clENS_4WeakE"( +// ARC-LABEL: define internal void @"_ZZN14LambdaDelegate4testEvEN3$_08__invokeENS_4WeakE"( +// ARC: call void @"_ZZN14LambdaDelegate4testEvENK3$_0clENS_4WeakE"( // ARC-NEXT: ret void -// ARC-LABEL: define internal void
[PATCH] D136397: [Clang] Change AnonStructIds in MangleContext to per-function based
xur marked an inline comment as done. xur added inline comments. Comment at: clang/include/clang/AST/Mangle.h:97 + +// If FunctionDecl is passed in, the anonnousstructID will be per-function +// based. rsmith wrote: > Fixed. Thanks! CHANGES SINCE LAST ACTION https://reviews.llvm.org/D136397/new/ https://reviews.llvm.org/D136397 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D136397: [Clang] Change AnonStructIds in MangleContext to per-function based
rsmith accepted this revision. rsmith added a comment. This revision is now accepted and ready to land. Looks good to me. Comment at: clang/include/clang/AST/Mangle.h:97 + +// If FunctionDecl is passed in, the anonnousstructID will be per-function +// based. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D136397/new/ https://reviews.llvm.org/D136397 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D136397: [Clang] Change AnonStructIds in MangleContext to per-function based
xur created this revision. xur added reviewers: rsmith, davidxl. Herald added a subscriber: wenlei. Herald added a project: All. xur requested review of this revision. Clang is generating different mangled names for the same lambda function in build that are slightly different (like from non-related source/Macro change). This is due to the fact that clang uses a cross-translation-unit sequential string "$_" in lambda's mangled name. Here, "n" is the AnonStructIds field in MangleContext. Different mangled names for unchanged function is undesirable: it makes perf comparison harder, and can cause some unnecessary profile mismatch in SampleFDO. This patch changes AnonStructIds to a per-function based seq number if the DeclContext is a function. I hold the change for Microsoft mangling and only change Itanium mangling. https://reviews.llvm.org/D136397 Files: clang/include/clang/AST/Mangle.h clang/lib/AST/ItaniumMangle.cpp clang/test/CodeGen/attr-function-return.cpp clang/test/CodeGenCXX/catch-undef-behavior.cpp clang/test/CodeGenCXX/cxx1y-init-captures-eh.cpp clang/test/CodeGenCXX/cxx1y-init-captures.cpp clang/test/CodeGenCXX/lambda-expressions-nested-linkage.cpp clang/test/CodeGenCXX/lambda-expressions.cpp clang/test/CodeGenCXX/mangle-lambdas.cpp clang/test/CodeGenCXX/nrvo.cpp clang/test/CodeGenObjCXX/arc-forwarded-lambda-call.mm clang/test/CodeGenObjCXX/block-nested-in-lambda.mm clang/test/CodeGenObjCXX/lambda-expressions.mm clang/test/CodeGenObjCXX/property-lvalue-lambda.mm Index: clang/test/CodeGenObjCXX/property-lvalue-lambda.mm === --- clang/test/CodeGenObjCXX/property-lvalue-lambda.mm +++ clang/test/CodeGenObjCXX/property-lvalue-lambda.mm @@ -36,12 +36,12 @@ // [x setBlk: operator+([x blk], [] {})] // CHECK: call void{{.*}}@objc_msgSend{{.*}} - // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_2EU13block_pointerFvvES4_T_" + // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_0EU13block_pointerFvvES4_T_" // CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} [[PLUS]]) x.blk += [] {}; // CHECK: call void{{.*}}@objc_msgSend{{.*}} - // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_3EPFvvES4_T_" + // CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_1EPFvvES4_T_" // CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} [[PLUS]]) x.fnptr += [] {}; } Index: clang/test/CodeGenObjCXX/lambda-expressions.mm === --- clang/test/CodeGenObjCXX/lambda-expressions.mm +++ clang/test/CodeGenObjCXX/lambda-expressions.mm @@ -38,7 +38,7 @@ // ARC: call i8* @llvm.objc.retainBlock // ARC: call void @llvm.objc.release // ARC-LABEL: define internal noundef i32 @___Z2f2v_block_invoke -// ARC: call noundef i32 @"_ZZ2f2vENK3$_1clEv +// ARC: call noundef i32 @"_ZZ2f2vENK3$_0clEv template void take_lambda(T &) { lambda(); } void take_block(void (^block)()) { block(); } @@ -66,7 +66,7 @@ // ARC: %[[CAPTURE0:.*]] = getelementptr inbounds %[[LAMBDACLASS]], %[[LAMBDACLASS]]* %{{.*}}, i32 0, i32 0 // ARC: store i32 %{{.*}}, i32* %[[CAPTURE0]] -// ARC: define internal void @"_ZZN13LambdaCapture4foo1ERiENK3$_3clEv"(%[[LAMBDACLASS]]* {{[^,]*}} %{{.*}}) +// ARC: define internal void @"_ZZN13LambdaCapture4foo1ERiENK3$_0clEv"(%[[LAMBDACLASS]]* {{[^,]*}} %{{.*}}) // ARC: %[[BLOCK:.*]] = alloca <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }> // ARC: %[[CAPTURE1:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>, <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>* %[[BLOCK]], i32 0, i32 5 // ARC: store i32 %{{.*}}, i32* %[[CAPTURE1]] @@ -75,11 +75,11 @@ // ARC-NOT: @llvm.objc.storeStrong( // ARC: ret void -// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_3clEv_block_invoke" +// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_0clEv_block_invoke" // ARC: %[[CAPTURE2:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>, <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>* %{{.*}}, i32 0, i32 5 // ARC: store i32 %{{.*}}, i32* %[[CAPTURE2]] -// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_3clEv_block_invoke_2"(i8* noundef %{{.*}}) +// ARC: define internal void @"___ZZN13LambdaCapture4foo1ERiENK3$_0clEv_block_invoke_2"(i8* noundef %{{.*}}) // ARC: %[[CAPTURE3:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>, <{ i8*, i32, i32, i8*, %struct.__block_descriptor*, i32 }>* %{{.*}}, i32 0, i32 5 // ARC: %[[V1:.*]] = load i32, i32* %[[CAPTURE3]] // ARC: store i32 %[[V1]], i32* @_ZN13LambdaCapture1iE @@ -141,11 +141,11 @@ // Check that the delegating invoke function doesn't destruct the Weak object // that is passed. -// ARC-LABEL: define internal void @"_ZZN14LambdaDelegate4testEvEN3$_58__invokeENS_4WeakE"( -//