Skip to content

Commit 352a2b6

Browse files
Use DIExpression::foldConstantMath() at the result of an AppendOpsToArg()
1 parent f79158c commit 352a2b6

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

llvm/lib/IR/DebugInfoMetadata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1782,7 +1782,7 @@ DIExpression *DIExpression::appendOpsToArg(const DIExpression *Expr,
17821782
if (StackValue)
17831783
NewOps.push_back(dwarf::DW_OP_stack_value);
17841784

1785-
return DIExpression::get(Expr->getContext(), NewOps);
1785+
return DIExpression::get(Expr->getContext(), NewOps)->foldConstantMath();
17861786
}
17871787

17881788
DIExpression *DIExpression::replaceArg(const DIExpression *Expr,

llvm/unittests/IR/MetadataTest.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3409,6 +3409,9 @@ TEST_F(DIExpressionTest, Append) {
34093409
dwarf::DW_OP_LLVM_arg, 0, dwarf::DW_OP_constu, 5, dwarf::DW_OP_plus};
34103410
auto *ResExpr = DIExpression::get(Context, OpsRes);
34113411
EXPECT_EQ(ResExpr, AppendExpr);
3412+
auto *AppendToArgExpr =
3413+
DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3414+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34123415

34133416
// Test appending a {dwarf::DW_OP_plus_uconst, <const>} to a DW_OP_plus
34143417
// expression uint64_t PlusUConstOps[] = {dwarf::DW_OP_plus_uconst, 3};
@@ -3423,6 +3426,8 @@ TEST_F(DIExpressionTest, Append) {
34233426
OpsRes.push_back(5);
34243427
ResExpr = DIExpression::get(Context, OpsRes);
34253428
EXPECT_EQ(ResExpr, AppendExpr);
3429+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3430+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34263431

34273432
// Test appending a {dwarf::DW_OP_constu, 0, DW_OP_plus} to an expression
34283433
AppendOps[0] = dwarf::DW_OP_constu;
@@ -3434,27 +3439,35 @@ TEST_F(DIExpressionTest, Append) {
34343439
OpsRes.push_back(dwarf::DW_OP_plus);
34353440
ResExpr = DIExpression::get(Context, OpsRes);
34363441
EXPECT_EQ(ResExpr, AppendExpr);
3442+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3443+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34373444

34383445
// Test appending a {dwarf::DW_OP_constu, 0, DW_OP_minus} to an expression
34393446
AppendOps[2] = dwarf::DW_OP_minus;
34403447
AppendExpr = DIExpression::append(Expr, AppendOps);
34413448
OpsRes[3] = Ops[3];
34423449
ResExpr = DIExpression::get(Context, OpsRes);
34433450
EXPECT_EQ(ResExpr, AppendExpr);
3451+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3452+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34443453

34453454
// Test appending a {dwarf::DW_OP_constu, 0, DW_OP_shl} to an expression
34463455
AppendOps[2] = dwarf::DW_OP_shl;
34473456
AppendExpr = DIExpression::append(Expr, AppendOps);
34483457
OpsRes[3] = Ops[3];
34493458
ResExpr = DIExpression::get(Context, OpsRes);
34503459
EXPECT_EQ(ResExpr, AppendExpr);
3460+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3461+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34513462

34523463
// Test appending a {dwarf::DW_OP_constu, 0, DW_OP_shr} to an expression
34533464
AppendOps[2] = dwarf::DW_OP_shr;
34543465
AppendExpr = DIExpression::append(Expr, AppendOps);
34553466
OpsRes[3] = Ops[3];
34563467
ResExpr = DIExpression::get(Context, OpsRes);
34573468
EXPECT_EQ(ResExpr, AppendExpr);
3469+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3470+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34583471

34593472
// Test appending a {dwarf::DW_OP_constu, <const>, DW_OP_mul} to a DW_OP_mul expression
34603473
Ops[4] = dwarf::DW_OP_mul;
@@ -3466,13 +3479,17 @@ TEST_F(DIExpressionTest, Append) {
34663479
OpsRes[4] = dwarf::DW_OP_mul;
34673480
ResExpr = DIExpression::get(Context, OpsRes);
34683481
EXPECT_EQ(ResExpr, AppendExpr);
3482+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3483+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34693484

34703485
// Test appending a {dwarf::DW_OP_constu, 1, DW_OP_mul} to an expression
34713486
AppendOps[1] = 1;
34723487
AppendExpr = DIExpression::append(Expr, AppendOps);
34733488
OpsRes[3] = Ops[3];
34743489
ResExpr = DIExpression::get(Context, OpsRes);
34753490
EXPECT_EQ(ResExpr, AppendExpr);
3491+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3492+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34763493

34773494
// Test appending a {dwarf::DW_OP_constu, 1, DW_OP_div} to an expression
34783495
AppendOps[1] = 1;
@@ -3481,6 +3498,8 @@ TEST_F(DIExpressionTest, Append) {
34813498
OpsRes[3] = Ops[3];
34823499
ResExpr = DIExpression::get(Context, OpsRes);
34833500
EXPECT_EQ(ResExpr, AppendExpr);
3501+
AppendToArgExpr = DIExpression::appendOpsToArg(Expr, AppendOps, 0, false);
3502+
EXPECT_EQ(ResExpr, AppendToArgExpr);
34843503
}
34853504

34863505
TEST_F(DIExpressionTest, isValid) {

0 commit comments

Comments
 (0)