
#15929: Explore whether adding XRay attributes to LLVM IR is worthwhile -------------------------------------+------------------------------------- Reporter: mpickering | Owner: (none) Type: task | Status: new Priority: normal | Milestone: 8.6.3 Component: Compiler | Version: 8.6.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by mpickering): I tried this out. The diff to add support was very simple. https://github.com/mpickering/ghc/commit/42c3df674e684fc33bcd472db8b55ace3d4... I then tried to compile the following program and to enable the XRay trace. {{{ module Main where main :: IO () main = print "abc" >> print (f 1000) >> print (g 1000) >> print (qux B) data T = A | B deriving Show f 0 = 1 f x = f (x -1) + 1 g 1 = 0 g x = g (x - 1) + f (x - 1) {-# NOINLINE qux #-} qux A = A qux B = qux A }}} The first thing to note was that it was necessary to use `clang-7.0.0` which I achieved by using this diff to `ghc.nix`. https://gist.github.com/mpickering/f1317ea6aac955eb9ecb1e2e1ef0fba7 Then I compiled with the following sequence of commands: {{{ inplace/bin/ghc-stage2 -fllvm -ddump-llvm llvm.hs -opta="-v" -pgma=clang -pgmc=clang -pgml=clang -optl="-fxray-instrument" -optl="-fxray- instruction-threshold=1" -O2 -fforce-recomp XRAY_OPTIONS="patch_premain=true xray_mode=xray-basic verbosity=1" ./llvm }}} Then the log file was analysed using the following command {{{ llvm-xray account -sort=sum -sortorder=dsc -instr_map ./llvm xray- log.llvm.XEyh0y }}} Which produced the very unhelpful profiling output. {{{ Functions with latencies: 7 funcid count [ min, med, 90p, 99p, max] sum function 7 18 [ 0.000006, 0.000006, 0.000021, 0.000040, 0.000040] 0.000175 <invalid>:0:0: @(422fd0) 5 14 [ 0.000006, 0.000006, 0.000014, 0.000021, 0.000021] 0.000110 <invalid>:0:0: @(422e90) 10 8 [ 0.000006, 0.000006, 0.000042, 0.000042, 0.000042] 0.000104 <invalid>:0:0: @(4231a8) 8 10 [ 0.000006, 0.000006, 0.000040, 0.000040, 0.000040] 0.000096 <invalid>:0:0: @(423070) 6 14 [ 0.000006, 0.000006, 0.000006, 0.000006, 0.000006] 0.000086 <invalid>:0:0: @(422f30) 11 13 [ 0.000006, 0.000006, 0.000006, 0.000008, 0.000008] 0.000082 <invalid>:0:0: @(423260) 9 7 [ 0.000006, 0.000006, 0.000014, 0.000014, 0.000014] 0.000055 <invalid>:0:0: @(423110) }}} Should be easy now for someone else more familiar with LLVM to investigate. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15929#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler