diff --git a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp index 7a631a646f3f8..c0cbebc91e737 100644 --- a/llvm/lib/Transforms/Coroutines/CoroFrame.cpp +++ b/llvm/lib/Transforms/Coroutines/CoroFrame.cpp @@ -2659,6 +2659,7 @@ salvageDebugInfoImpl(SmallDenseMap &ArgToAllocaMap, Expr = DIExpression::prepend(Expr, DIExpression::DerefBefore); } + Expr = Expr->foldConstantMath(); return {{*Storage, *Expr}}; } diff --git a/llvm/test/Transforms/Coroutines/swift-async-dbg.ll b/llvm/test/Transforms/Coroutines/swift-async-dbg.ll index 8c90fcbe19bc5..2cd0f1c42b730 100644 --- a/llvm/test/Transforms/Coroutines/swift-async-dbg.ll +++ b/llvm/test/Transforms/Coroutines/swift-async-dbg.ll @@ -30,7 +30,7 @@ define swifttailcc void @coroutineA(ptr swiftasync %arg) !dbg !48 { ; CHECK-LABEL: define {{.*}} @coroutineA( ; CHECK-SAME: ptr swiftasync %[[frame_ptr:.*]]) ; CHECK: #dbg_declare(ptr %[[frame_ptr]], {{.*}} !DIExpression( -; CHECK-SAME: DW_OP_plus_uconst, 16, DW_OP_plus_uconst, 8) +; CHECK-SAME: DW_OP_plus_uconst, 24) ; CHECK: #dbg_value(ptr %[[frame_ptr]], {{.*}} !DIExpression( ; CHECK-SAME: DW_OP_plus_uconst, 16, DW_OP_deref) ; CHECK: call {{.*}} @swift_task_switch @@ -49,7 +49,7 @@ define swifttailcc void @coroutineA(ptr swiftasync %arg) !dbg !48 { ; CHECK-LABEL: define {{.*}} @coroutineATY0_( ; CHECK-SAME: ptr swiftasync %[[frame_ptr:.*]]) ; CHECK: #dbg_declare(ptr %[[frame_ptr]], {{.*}} !DIExpression( -; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_plus_uconst, 16, DW_OP_plus_uconst, 8) +; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_plus_uconst, 24) ; CHECK: #dbg_value(ptr %[[frame_ptr]], {{.*}} !DIExpression( ; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_plus_uconst, 16, DW_OP_deref) ; CHECK: #dbg_value(!DIArgList(ptr %[[frame_ptr]], i32 %{{.*}}), {{.*}} !DIExpression( @@ -70,7 +70,7 @@ define swifttailcc void @coroutineA(ptr swiftasync %arg) !dbg !48 { ; CHECK-SAME: ptr swiftasync %[[frame_ptr:.*]]) ; Note the extra level of indirection that shows up here! ; CHECK: #dbg_declare(ptr %[[frame_ptr]], {{.*}} !DIExpression( -; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_deref, DW_OP_plus_uconst, 16, DW_OP_plus_uconst, 8) +; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_deref, DW_OP_plus_uconst, 24) ; CHECK: #dbg_value(ptr %[[frame_ptr]], {{.*}} !DIExpression( ; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_deref, DW_OP_plus_uconst, 16, DW_OP_deref) ; CHECK: call {{.*}} @swift_task_switch @@ -85,7 +85,7 @@ define swifttailcc void @coroutineA(ptr swiftasync %arg) !dbg !48 { ; CHECK-LABEL: define {{.*}} @coroutineATY2_( ; CHECK-SAME: ptr swiftasync %[[frame_ptr:.*]]) ; CHECK: #dbg_declare(ptr %[[frame_ptr]], {{.*}} !DIExpression( -; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_plus_uconst, 16, DW_OP_plus_uconst, 8) +; CHECK-SAME: DW_OP_LLVM_entry_value, 1, DW_OP_plus_uconst, 24) } ; Everything from here on is just support code for the coroutines.