[llvm] [DWARFLinker] Preserve DWARF discriminators while linking (PR #96124)

David Tellenbach via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 20 21:36:42 PDT 2024


https://github.com/dtellenbach updated https://github.com/llvm/llvm-project/pull/96124

>From ce16f6f9d2621ada8b6caf914fbbe9d910a87ee1 Mon Sep 17 00:00:00 2001
From: David Tellenbach <dtellenbach at apple.com>
Date: Wed, 19 Jun 2024 16:45:39 -0700
Subject: [PATCH 1/4] [DWARFLinker] Preserve DWARF discriminators while linking

DWARF-4 introduced DWARF discriminators but both, the classic and the
parallel DWARF linkers discarded them so far.

After applying this patch dsymutil, which uses the DWARF linkers, correctly
preserves discriminator information.
---
 .../lib/DWARFLinker/Classic/DWARFStreamer.cpp |  17 ++++++--
 .../Parallel/DebugLineSectionEmitter.h        |  14 +++++--
 .../tools/dsymutil/Inputs/discriminator.arm64 | Bin 0 -> 17232 bytes
 llvm/test/tools/dsymutil/discriminator.test   |  39 ++++++++++++++++++
 4 files changed, 62 insertions(+), 8 deletions(-)
 create mode 100755 llvm/test/tools/dsymutil/Inputs/discriminator.arm64
 create mode 100644 llvm/test/tools/dsymutil/discriminator.test

diff --git a/llvm/lib/DWARFLinker/Classic/DWARFStreamer.cpp b/llvm/lib/DWARFLinker/Classic/DWARFStreamer.cpp
index 8b31b5ead29ad..cc4ee2a1b4aec 100644
--- a/llvm/lib/DWARFLinker/Classic/DWARFStreamer.cpp
+++ b/llvm/lib/DWARFLinker/Classic/DWARFStreamer.cpp
@@ -1060,6 +1060,7 @@ void DwarfStreamer::emitLineTableRows(
   unsigned FileNum = 1;
   unsigned LastLine = 1;
   unsigned Column = 0;
+  unsigned Discriminator = 0;
   unsigned IsStatement = 1;
   unsigned Isa = 0;
   uint64_t Address = -1ULL;
@@ -1098,9 +1099,17 @@ void DwarfStreamer::emitLineTableRows(
       MS->emitULEB128IntValue(Column);
       LineSectionSize += 1 + getULEB128Size(Column);
     }
-
-    // FIXME: We should handle the discriminator here, but dsymutil doesn't
-    // consider it, thus ignore it for now.
+    if (Discriminator != Row.Discriminator &&
+        MS->getContext().getDwarfVersion() >= 4) {
+      Discriminator = Row.Discriminator;
+      unsigned Size = getULEB128Size(Discriminator);
+      MS->emitIntValue(dwarf::DW_LNS_extended_op, 1);
+      MS->emitULEB128IntValue(Size + 1);
+      MS->emitIntValue(dwarf::DW_LNE_set_discriminator, 1);
+      MS->emitULEB128IntValue(Discriminator);
+      LineSectionSize += /* extended op */ 1 + getULEB128Size(Size + 1) +
+                         /* discriminator */ 1 + Size;
+    }
 
     if (Isa != Row.Isa) {
       Isa = Row.Isa;
@@ -1156,7 +1165,7 @@ void DwarfStreamer::emitLineTableRows(
       EncodingBuffer.resize(0);
       Address = -1ULL;
       LastLine = FileNum = IsStatement = 1;
-      RowsSinceLastSequence = Column = Isa = 0;
+      RowsSinceLastSequence = Column = Discriminator = Isa = 0;
     }
   }
 
diff --git a/llvm/lib/DWARFLinker/Parallel/DebugLineSectionEmitter.h b/llvm/lib/DWARFLinker/Parallel/DebugLineSectionEmitter.h
index 1839164dcec17..0c4395589248a 100644
--- a/llvm/lib/DWARFLinker/Parallel/DebugLineSectionEmitter.h
+++ b/llvm/lib/DWARFLinker/Parallel/DebugLineSectionEmitter.h
@@ -315,6 +315,7 @@ class DebugLineSectionEmitter {
     unsigned FileNum = 1;
     unsigned LastLine = 1;
     unsigned Column = 0;
+    unsigned Discriminator = 0;
     unsigned IsStatement = 1;
     unsigned Isa = 0;
     uint64_t Address = -1ULL;
@@ -350,9 +351,14 @@ class DebugLineSectionEmitter {
         Section.emitIntVal(dwarf::DW_LNS_set_column, 1);
         encodeULEB128(Column, Section.OS);
       }
-
-      // FIXME: We should handle the discriminator here, but dsymutil doesn't
-      // consider it, thus ignore it for now.
+      if (Discriminator != Row.Discriminator && MC->getDwarfVersion() >= 4) {
+        Discriminator = Row.Discriminator;
+        unsigned Size = getULEB128Size(Discriminator);
+        Section.emitIntVal(dwarf::DW_LNS_extended_op, 1);
+        encodeULEB128(Size + 1, Section.OS);
+        Section.emitIntVal(dwarf::DW_LNE_set_discriminator, 1);
+        encodeULEB128(Discriminator, Section.OS);
+      }
 
       if (Isa != Row.Isa) {
         Isa = Row.Isa;
@@ -397,7 +403,7 @@ class DebugLineSectionEmitter {
         EncodingBuffer.resize(0);
         Address = -1ULL;
         LastLine = FileNum = IsStatement = 1;
-        RowsSinceLastSequence = Column = Isa = 0;
+        RowsSinceLastSequence = Column = Discriminator = Isa = 0;
       }
     }
 
diff --git a/llvm/test/tools/dsymutil/Inputs/discriminator.arm64 b/llvm/test/tools/dsymutil/Inputs/discriminator.arm64
new file mode 100755
index 0000000000000000000000000000000000000000..c48979fd8e9ff7bdfe959b6dd98a1b90cde00190
GIT binary patch
literal 17232
zcmeI4TWnNi5XWcR#eyxakz&Q7T at s37bT4JoY+vMTr2>IKMKqiC;d9$PYmeQF*-LB%
zYK<vMFoBXPuk{vzNaF2*^@0r~YN9ErY1Ei#TAsE^c{3VGYW>f-q-WuQ=#vjK$?SYH
z-#7Ek`R#d~bLINAzZ-}=1gU}E39Vo;Mt-b_Hb8elmFkY|?CR+{u%DyVVkTFIZt}QJ
z1*+7+uK2;~Z8Kl1j*;!JLYS3%V^ON84;8Jo<yY5h+-^P0>-G`$om?~IrBQp!G)k4S
zFBsXRGP0>0A~*IoY1ezkPGY~Ro*j403a`Dp_wDK0vD<l8&4vtXify}VEteU%IYx*^
z`M+QeQJ8JEAGLk%;U4G^d_Ff6Bf0=v5ABAsthJS|Fl%w}U&<Xg?}y?Yp<t<y52lU2
zU~)K}gwN6p<vzB~zP)|Z$!P1TZ;$Qy{OEJ1+7R<Yt!MIK<uljj<KEWmeFzbEPY>ex
zxK0{;-NN at qp}c2t--*}3v(gLtd2+Z=)H8w30Qxfetn4i?T>p8EXf^Cs+h<-Z_d$6-
z)QLW=COIr31cZPP5CTF#2nYcoAOwVf5D)@FKnMr{As_^VfDjM at LO=)z0U;m+gn$qb
z0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{As_^VfDjM at LO=)z0U;m+guwrd
z!160JGuJ}p`DQ9#ZK86eMJt~nieOB*vC^!SD?TcFdEI2K&A1QibvV0DD=*;u>LY8K
z7jTwfQEz;zR{h9zmkxQ(E<Hx$UtMmwFjtQ|YU!`JdaWFz(F1+Z`Q_!)ONU}-og5xb
z-e~i2Tb_mH*>(+<mFLn~H1l`mhv%&uFge`_Wr_3fwBK~_2$uL^Lbh^*?{vf-Pj}oE
z>rvFi9+$19i4puPj$o-W14<v#`%6V#4d{uao~JdbT#nXe5=NHpnixR`5WXYnx at Z&o
zykSc(tlJ-ipF&n$rjX(zoEpH7Gw**l{LL<(_cueW+pP2ZZrJC1o;T;SJjc%Yj?Xd9
z#~i*X>~p?*-`ziB at Oi9>c0SAf_^@#L<NEA7`F?z9;AT>aNhy<5 at Tr2HF9efCJ)PFG
zeTn{oV4%>SPZY6e3$;Z;?coj;Zdc*33Uve`#<SUIsi&tD4pP#<IU{3a6UAIU&`<xl
zQgtEzIs(!4-x{Vs%ug0J7-~cekMF^2=H>T+QKX>`dd%y0hWs_=Cj|KXt;G3sgQxob
zL_X6Vp^mxP4`XjW^82~lH`YBJT>r<F=wjy^^WT5*$!P00)87qmJO9!LAIEcFFQlft
zKh4Yx*6fe3T0Z>g;TOk#`SSR#V-LT7tNkNKCoi3NcX8si at e?Pfug$&_fBF7DKRZ2H
x_fg{4t3O<xytwy#$9wl4zo^fTJ+LJ<*t&klbnEzrOR?TZUsXRp{={4He*mnBI9dPz

literal 0
HcmV?d00001

diff --git a/llvm/test/tools/dsymutil/discriminator.test b/llvm/test/tools/dsymutil/discriminator.test
new file mode 100644
index 0000000000000..9bd1de2083567
--- /dev/null
+++ b/llvm/test/tools/dsymutil/discriminator.test
@@ -0,0 +1,39 @@
+; The DWARF at Inputs/discriminator.arm64 this test is based on was produced by
+; compiling
+;
+;   __attribute__((noinline))
+;   int foo(int a, int b, int c) {
+;     int x = a ? b : c;
+;     return x * a * b;
+;   }
+;
+;   int main(int argc, char** argv) {
+;     return foo(argc, 2, 3);
+;   }
+;
+; with -g -fdebug-info-for-profiling.
+
+RUN: dsymutil --flat --linker=classic -o - --verify-dwarf=none %p/Inputs/discriminator.arm64 | llvm-dwarfdump -debug-line - | FileCheck %s
+RUN: dsymutil --flat --linker=parallel -o - --verify-dwarf=none %p/Inputs/discriminator.arm64 | llvm-dwarfdump -debug-line - | FileCheck %s
+
+CHECK:         Address            Line   Column File   ISA Discriminator OpIndex Flags
+CHECK-NEXT:    ------------------ ------ ------ ------ --- ------------- ------- -------------
+CHECK-NEXT:    0x0000000100003f14      2      0      0   0             0       0  is_stmt
+CHECK-NEXT:    0x0000000100003f24      3     11      0   0             0       0  is_stmt prologue_end
+CHECK-NEXT:    0x0000000100003f30      3     15      0   0             2       0
+CHECK-NEXT:    0x0000000100003f38      3     11      0   0             0       0
+CHECK-NEXT:    0x0000000100003f3c      3     19      0   0             4       0
+CHECK-NEXT:    0x0000000100003f44      3     11      0   0             0       0
+CHECK-NEXT:    0x0000000100003f48      0     11      0   0             0       0
+CHECK-NEXT:    0x0000000100003f4c      3      7      0   0             6       0
+CHECK-NEXT:    0x0000000100003f50      4     10      0   0             0       0  is_stmt
+CHECK-NEXT:    0x0000000100003f54      4     14      0   0             0       0
+CHECK-NEXT:    0x0000000100003f58      4     12      0   0             0       0
+CHECK-NEXT:    0x0000000100003f5c      4     18      0   0             0       0
+CHECK-NEXT:    0x0000000100003f60      4     16      0   0             0       0
+CHECK-NEXT:    0x0000000100003f64      4      3      0   0             0       0  epilogue_begin
+CHECK-NEXT:    0x0000000100003f6c      7      0      0   0             0       0  is_stmt
+CHECK-NEXT:    0x0000000100003f84      8     14      0   0             0       0  is_stmt prologue_end
+CHECK-NEXT:    0x0000000100003f88      8     10      0   0             0       0
+CHECK-NEXT:    0x0000000100003f94      8      3      0   0             0       0  epilogue_begin
+CHECK-NEXT:    0x0000000100003fa0      8      3      0   0             0       0  end_sequence
\ No newline at end of file

>From 1172de3ea4413b13736dc23ca21dda5702d79eb0 Mon Sep 17 00:00:00 2001
From: David Tellenbach <dtellenbach at apple.com>
Date: Wed, 19 Jun 2024 16:52:16 -0700
Subject: [PATCH 2/4] [DWARFLinker] Fix formulation on discriminator test

---
 llvm/test/tools/dsymutil/discriminator.test | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/llvm/test/tools/dsymutil/discriminator.test b/llvm/test/tools/dsymutil/discriminator.test
index 9bd1de2083567..3c2d52150e45f 100644
--- a/llvm/test/tools/dsymutil/discriminator.test
+++ b/llvm/test/tools/dsymutil/discriminator.test
@@ -1,5 +1,4 @@
-; The DWARF at Inputs/discriminator.arm64 this test is based on was produced by
-; compiling
+; The DWARF at Inputs/discriminator.arm64 this test was produced by compiling
 ;
 ;   __attribute__((noinline))
 ;   int foo(int a, int b, int c) {

>From acd473d6fc32dcbc55753b27ae4b4799c2d0dbd6 Mon Sep 17 00:00:00 2001
From: David Tellenbach <dtellenbach at apple.com>
Date: Wed, 19 Jun 2024 16:57:52 -0700
Subject: [PATCH 3/4] [DWARFLinker] Fix formulation on discriminator test

---
 llvm/test/tools/dsymutil/discriminator.test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/test/tools/dsymutil/discriminator.test b/llvm/test/tools/dsymutil/discriminator.test
index 3c2d52150e45f..5a8631fb819d4 100644
--- a/llvm/test/tools/dsymutil/discriminator.test
+++ b/llvm/test/tools/dsymutil/discriminator.test
@@ -1,4 +1,4 @@
-; The DWARF at Inputs/discriminator.arm64 this test was produced by compiling
+; The input at Inputs/discriminator.arm64 was produced by compiling
 ;
 ;   __attribute__((noinline))
 ;   int foo(int a, int b, int c) {

>From 4a7f3135aa5686a5ea2ea9fb9d495afc6146452d Mon Sep 17 00:00:00 2001
From: David Tellenbach <dtellenbach at apple.com>
Date: Thu, 20 Jun 2024 21:35:49 -0700
Subject: [PATCH 4/4] [DWARFLinker] Change objects and test for dsymutil
 discriminator test

---
 ...inator.arm64 => discriminator.arm64.dylib} | Bin 17232 -> 17032 bytes
 .../dsymutil/Inputs/discriminator.arm64.o     | Bin 0 -> 2032 bytes
 llvm/test/tools/dsymutil/discriminator.test   |  51 +++++++-----------
 3 files changed, 18 insertions(+), 33 deletions(-)
 rename llvm/test/tools/dsymutil/Inputs/{discriminator.arm64 => discriminator.arm64.dylib} (88%)
 create mode 100644 llvm/test/tools/dsymutil/Inputs/discriminator.arm64.o

diff --git a/llvm/test/tools/dsymutil/Inputs/discriminator.arm64 b/llvm/test/tools/dsymutil/Inputs/discriminator.arm64.dylib
similarity index 88%
rename from llvm/test/tools/dsymutil/Inputs/discriminator.arm64
rename to llvm/test/tools/dsymutil/Inputs/discriminator.arm64.dylib
index c48979fd8e9ff7bdfe959b6dd98a1b90cde00190..94890e532f82e14a16b1be0569fb40f15edcbef5 100755
GIT binary patch
delta 836
zcmcc6#@NxyD1H9d+kZR^42%pwzy`#;K%BwEz|hJdFfmziVm#}_PIti>_8 at 5n1_21g
zFk|9Fd%+b@!3e0}iphqI*70DD15^k~cL2=;0gxqNi at -dHT^2yL1e&;>eoAI>a#3b(
zW?o`Revw{cQLdSZUP@(7X42%zjEbfp^&lfbbc6!~0~e6~0i-j4G&c|j05J$~LNUlr
zuE~PT=GxLg7D$&#?*Ela|IH-U>AagUBkJK(BcPZ95JOzY4`eY+&SsL;Qv)(Uo(^ze
zVBi4KnovH-RuGT{Vvu}-BLjm5<7Po-W}D3l%>0Zz@(c`x9xU^v7-|`%C(p50-~|Pt
z15hOhub6z&UY3s$s1srzP>5;rAA1!>rpby9QuS&1`3%4)VPIfpm{AX+K>)@A=}3WV
zV_;wh at j(ip0O$}Dejt#a2DHcIZ%G<R2}r9Rkbp%gC>&Lg_>2rLKmnj2EUrNs{7 at 92
zIsjw<Ka#uxLp;y}lV>>k1YwKCe1>25cn$#F0Sa1>*&rYS6a$*WD8#_T0*YFYnMFVx
z0g?m)Rt5&g1O+Arp2;5>)tzB3W58xUIF&GjT?$T%ocg_!EA4*9T8FPsnAp}V6TNKC
zkdW}aG;+>mp2-)S9Gr5Utmp8j?|J4Ku6TOV{zKYEjNu8rhhO&iNyj$lI?8<V{Jv_Z
j*1BU^8ew<8a^2zSnJtv)HTe`9V?Yd})xQsWY8e;+RPmL$

literal 17232
zcmeI4TWnNi5XWcR#eyxakz&Q7T at s37bT4JoY+vMTr2>IKMKqiC;d9$PYmeQF*-LB%
zYK<vMFoBXPuk{vzNaF2*^@0r~YN9ErY1Ei#TAsE^c{3VGYW>f-q-WuQ=#vjK$?SYH
z-#7Ek`R#d~bLINAzZ-}=1gU}E39Vo;Mt-b_Hb8elmFkY|?CR+{u%DyVVkTFIZt}QJ
z1*+7+uK2;~Z8Kl1j*;!JLYS3%V^ON84;8Jo<yY5h+-^P0>-G`$om?~IrBQp!G)k4S
zFBsXRGP0>0A~*IoY1ezkPGY~Ro*j403a`Dp_wDK0vD<l8&4vtXify}VEteU%IYx*^
z`M+QeQJ8JEAGLk%;U4G^d_Ff6Bf0=v5ABAsthJS|Fl%w}U&<Xg?}y?Yp<t<y52lU2
zU~)K}gwN6p<vzB~zP)|Z$!P1TZ;$Qy{OEJ1+7R<Yt!MIK<uljj<KEWmeFzbEPY>ex
zxK0{;-NN at qp}c2t--*}3v(gLtd2+Z=)H8w30Qxfetn4i?T>p8EXf^Cs+h<-Z_d$6-
z)QLW=COIr31cZPP5CTF#2nYcoAOwVf5D)@FKnMr{As_^VfDjM at LO=)z0U;m+gn$qb
z0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@FKnMr{As_^VfDjM at LO=)z0U;m+guwrd
z!160JGuJ}p`DQ9#ZK86eMJt~nieOB*vC^!SD?TcFdEI2K&A1QibvV0DD=*;u>LY8K
z7jTwfQEz;zR{h9zmkxQ(E<Hx$UtMmwFjtQ|YU!`JdaWFz(F1+Z`Q_!)ONU}-og5xb
z-e~i2Tb_mH*>(+<mFLn~H1l`mhv%&uFge`_Wr_3fwBK~_2$uL^Lbh^*?{vf-Pj}oE
z>rvFi9+$19i4puPj$o-W14<v#`%6V#4d{uao~JdbT#nXe5=NHpnixR`5WXYnx at Z&o
zykSc(tlJ-ipF&n$rjX(zoEpH7Gw**l{LL<(_cueW+pP2ZZrJC1o;T;SJjc%Yj?Xd9
z#~i*X>~p?*-`ziB at Oi9>c0SAf_^@#L<NEA7`F?z9;AT>aNhy<5 at Tr2HF9efCJ)PFG
zeTn{oV4%>SPZY6e3$;Z;?coj;Zdc*33Uve`#<SUIsi&tD4pP#<IU{3a6UAIU&`<xl
zQgtEzIs(!4-x{Vs%ug0J7-~cekMF^2=H>T+QKX>`dd%y0hWs_=Cj|KXt;G3sgQxob
zL_X6Vp^mxP4`XjW^82~lH`YBJT>r<F=wjy^^WT5*$!P00)87qmJO9!LAIEcFFQlft
zKh4Yx*6fe3T0Z>g;TOk#`SSR#V-LT7tNkNKCoi3NcX8si at e?Pfug$&_fBF7DKRZ2H
x_fg{4t3O<xytwy#$9wl4zo^fTJ+LJ<*t&klbnEzrOR?TZUsXRp{={4He*mnBI9dPz

diff --git a/llvm/test/tools/dsymutil/Inputs/discriminator.arm64.o b/llvm/test/tools/dsymutil/Inputs/discriminator.arm64.o
new file mode 100644
index 0000000000000000000000000000000000000000..f50971ae58ffa990a5ceae85e2a472c5411d7b1e
GIT binary patch
literal 2032
zcmbVM&1)1{5U)4gJ$_6!ALfvZK{G5FRM1Y(WRh`|-Br+Khm8=$F9P!DuSr^ay5n?D
z6xk)Zhb0RhyeTZKikJNp77vRo%i_(OcvM8xgNQd#5UaXhCo`?9!Gd~K^{VRE_3G8@
zdv9L6>j7YZM2n2Po0bAHQXcs)DN;YWl!fmk<sc>YI at F1Cw28!dXrB*bJ+_Y?Jb850
zPPBfZ5MCzPBq_tiPLp%XHrjLC^-b3a!hrJwC-xutekCNq*(!GCMSUv)Dfk3WH;k6O
zNcDE(sUp!4^4B%uIbOr3lr-K|fio-Q%QfN!VT=2X#s}wpC2)2MSyzOzD!SU4oEPz;
zh;)5hqKN>wEArcG#M3P+0!-sQ5qQbHe3OlVui%gf*GKE~^rjtPXd3UeNLmo}%^+SE
zK+5FY^qUL18S=Jw&haeHrw at qKNX(1mg4n!+cr at DAK2x9Tcs8Y^>suChy1;uV&U<4G
zc$_XdHGj_qUR~hrr^nSzUB at q@Zx}glQ{PG?1=0SWm`~?>fRb!_r!&Yz6hln8pLqJ{
z{eKz-IQxTqeKY*bM(#-b{$>nSV10y1qb@@an~{6^<y&m#I<Ns&EDkDC at t2>9t)c#*
zk>aDJ{J_YjY%p}04PiAZBkSo>e&6tgyj0wi+nd{#uMd8g$2crffy~$OZha83(Hvei
zl`)Wt-{x|3#N$yJY&{ArWec!Oq at pDOjV4+6JH+FY#e5mqF;pbT#)`}iuS>Kecp7qo
zq9`(KCxt8|dhtuhmymBG|Bd_)^1sOcA)Bu5%@r2yR^a$vp;S{fRhx6d!ggHtA<wrB
z6~}dt722+Adxmb#kGt+-bJs%4KW&?#O2N8mRjL!#RKuJoTc%-7PF5!;jB-`CD at LVS
ztC?j>vkYr$2Ut#Eww$Kp>7n0JO&EvqV*!4Ayc1u=7(K)fm9=t3n<~|KX^NLhT&t-S
zXU^N*o}F!%pyB)Acp*5TgAsL#F13SP)Ts^e+{KP$o(9mQ;OXh(hqS7uk(c7guU%Zu
z{T3|es8!T5B6>1xOd6E&iZf~~MawhP?oOiXLL#UxI)xUMSVhSgd)xaJ3HmBBDx*=M
z5*y9*DO*{Ma_|5C$Kx}LWA&TnDfPmk=g(wNHg1FsE6_Nnkdd?5+Zmh=_QkDC-wJ&?
u?hlp}{VhoTh<hYyD0`z?DJl-=-2jmMx5(Ak;RjAv<%Z3LQnW_R#+di~Z2Q>&

literal 0
HcmV?d00001

diff --git a/llvm/test/tools/dsymutil/discriminator.test b/llvm/test/tools/dsymutil/discriminator.test
index 5a8631fb819d4..6a3c91e641ef0 100644
--- a/llvm/test/tools/dsymutil/discriminator.test
+++ b/llvm/test/tools/dsymutil/discriminator.test
@@ -1,38 +1,23 @@
-; The input at Inputs/discriminator.arm64 was produced by compiling
+; The input at Inputs/discriminator.arm64.dylib[.o] produced by compiling
 ;
-;   __attribute__((noinline))
-;   int foo(int a, int b, int c) {
-;     int x = a ? b : c;
-;     return x * a * b;
+;   int foo(int i, int a, int b) {
+;     return i ? a : a * b;
 ;   }
 ;
-;   int main(int argc, char** argv) {
-;     return foo(argc, 2, 3);
-;   }
-;
-; with -g -fdebug-info-for-profiling.
+; with -g -fdebug-info-for-profiling -O2.
+
+RUN: dsymutil --flat --linker=classic -oso-prepend-path %p -o - \
+RUN:  --oso-prepend-path %p/Inputs --verify-dwarf=none \
+RUN:  %p/Inputs/discriminator.arm64.dylib | llvm-dwarfdump -debug-line - \
+RUN:  | FileCheck %s
 
-RUN: dsymutil --flat --linker=classic -o - --verify-dwarf=none %p/Inputs/discriminator.arm64 | llvm-dwarfdump -debug-line - | FileCheck %s
-RUN: dsymutil --flat --linker=parallel -o - --verify-dwarf=none %p/Inputs/discriminator.arm64 | llvm-dwarfdump -debug-line - | FileCheck %s
+RUN: dsymutil --flat --linker=parallel -oso-prepend-path %p -o - \
+RUN:  --oso-prepend-path %p/Inputs --verify-dwarf=none \
+RUN:  %p/Inputs/discriminator.arm64.dylib | llvm-dwarfdump -debug-line - \
+RUN:  | FileCheck %s
 
-CHECK:         Address            Line   Column File   ISA Discriminator OpIndex Flags
-CHECK-NEXT:    ------------------ ------ ------ ------ --- ------------- ------- -------------
-CHECK-NEXT:    0x0000000100003f14      2      0      0   0             0       0  is_stmt
-CHECK-NEXT:    0x0000000100003f24      3     11      0   0             0       0  is_stmt prologue_end
-CHECK-NEXT:    0x0000000100003f30      3     15      0   0             2       0
-CHECK-NEXT:    0x0000000100003f38      3     11      0   0             0       0
-CHECK-NEXT:    0x0000000100003f3c      3     19      0   0             4       0
-CHECK-NEXT:    0x0000000100003f44      3     11      0   0             0       0
-CHECK-NEXT:    0x0000000100003f48      0     11      0   0             0       0
-CHECK-NEXT:    0x0000000100003f4c      3      7      0   0             6       0
-CHECK-NEXT:    0x0000000100003f50      4     10      0   0             0       0  is_stmt
-CHECK-NEXT:    0x0000000100003f54      4     14      0   0             0       0
-CHECK-NEXT:    0x0000000100003f58      4     12      0   0             0       0
-CHECK-NEXT:    0x0000000100003f5c      4     18      0   0             0       0
-CHECK-NEXT:    0x0000000100003f60      4     16      0   0             0       0
-CHECK-NEXT:    0x0000000100003f64      4      3      0   0             0       0  epilogue_begin
-CHECK-NEXT:    0x0000000100003f6c      7      0      0   0             0       0  is_stmt
-CHECK-NEXT:    0x0000000100003f84      8     14      0   0             0       0  is_stmt prologue_end
-CHECK-NEXT:    0x0000000100003f88      8     10      0   0             0       0
-CHECK-NEXT:    0x0000000100003f94      8      3      0   0             0       0  epilogue_begin
-CHECK-NEXT:    0x0000000100003fa0      8      3      0   0             0       0  end_sequence
\ No newline at end of file
+CHECK:          Address            Line   Column File   ISA Discriminator OpIndex Flags
+CHECK-NEXT:     ------------------ ------ ------ ------ --- ------------- ------- -------------
+CHECK-NEXT:     0x0000000000003f98      2     10      0   0             0       0  is_stmt prologue_end
+CHECK-NEXT:     0x0000000000003fa4      2      3      0   0             6       0
+CHECK-NEXT:     0x0000000000003fa8      2      3      0   0             0       0  end_sequence
\ No newline at end of file



More information about the llvm-commits mailing list