Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Souper: A Synthesizing Superoptimizer for LLVM

Avatar for Harlan Harlan
December 08, 2017

Souper: A Synthesizing Superoptimizer for LLVM

This is a 10 minute presentation I gave as the final homework for my Programming Language Theory class. It's woefully incomplete compared to the paper, and I'm positive I misrepresented some of the details.

Avatar for Harlan

Harlan

December 08, 2017
Tweet

More Decks by Harlan

Other Decks in Programming

Transcript

  1. 8IBUJT--7. ↟ 1PQVMBSTFUPGMJCSBSJFTGPSDPNQJMFST ↟ %FGJOFTBOJOUFSNFEJBUFCFUXFFOIJHIMFWFMDPEFBOENBDIJOFDPEF ↟ --7.*3 ↟ 6TFEBTUIFCBDLFOEGPSEP[FOTPGDPNQJMFST ↟

    $MBOH 3VTU 4XJGU $SZTUBM /JN 5SJMM ↟ .BJOCFOFGJU ↟ $PNNPOMBOHVBHF→ DSPTTDPNQJMBUJPO PQUJNJ[BUJPOT WFSJGJDBUJPOGPSGSFF
  2. int plusOne(int n) { return n + 1; } --7.*OUFSNFEJBUF3FQSFTFOUBUJPO

    *3 ↟ )JHIMFWFM"TTFNCMZMBOHVBHF ↟ 'VODUJPOT NFUBEBUB UZQFT ↟ 'VMMZTUBUJDBMMZUZQFE ↟ 4UBUJD4JOHMF"TTJHONFOUGPSN ↟ *OGJOJUFSFHJTUFST BTTJHOFEPODF
  3. define i32 @plusOne(i32 %n) { entry: %0 = add i32

    %n, i32 1 ret i32 %0 } int plusOne(int n) { return n + 1; } --7.*OUFSNFEJBUF3FQSFTFOUBUJPO *3 ↟ )JHIMFWFM"TTFNCMZMBOHVBHF ↟ 'VODUJPOT NFUBEBUB UZQFT ↟ 'VMMZTUBUJDBMMZUZQFE ↟ 4UBUJD4JOHMF"TTJHONFOUGPSN ↟ *OGJOJUFSFHJTUFST BTTJHOFEPODF
  4. *OUSPEVDUJPOUP4PVQFS ↟ 0QUJNJ[BUJPO0SJFOUFE*3 ↟ %JTDPWFSTPQUJNJ[BUJPOTVTJOH UFDIOJRVFTGSPNWFSJGJDBUJPO ↟ --7.*3JTMPXFSFEUP4PVQFS*3 ↟ )BTNPSFSFTUSJDUFETFNBOUJDT

    ↟ 4VQQPSUTBTVCTFUPG--7. GFBUVSFT define i32 @plusOne(i32 %n) { entry: %0 = add i32 %n, i32 1 ret i32 %0 } %n: i32 = var %0 = add %n 1 infer %0 int plusOne(int n) { return n + 1; }
  5. 4ZOUIFTJ[JOH0QUJNJ[BUJPOT ↟ 1SPCMFN ↟ (JWFOB-)4 GJOEB3)4UIBUQFSGPSNTJEFOUJDBMMZ ↟ 5ZQJDBMPQUJNJ[BUJPO ↟ $POTUSBJOFETFUPGMPXFSJOHSVMFT

    ↟ .BUDIQBUUFSOT BEKVTUJOHDPEFJGQSPGJUBCMF -)4 3)4 %0 = add %n, 10: i32 %1 = add %0, 1: i32 %0 = add %n, 11: i32
  6. 4ZOUIFTJ[JOH0QUJNJ[BUJPOT ↟ $PVOUFS&YBNQMF(VJEFE*OEVDUJWF4ZOUIFTJT ↟ %FTDSJCFEJOSynthesis of loop-free programsCZ(VMXBOJ FUBM ↟

    %FDPOTUSVDUUIFQSPHSBNJOUPBEFQFOEFODZHSBQI ↟ 5XP4.54PMWFT  *TUIFSFBTFUPGSFMBUJPOTIJQTCFUXFFOWBMVFTTVDIUIBUBMM DPOTUSBJOUTBSFTBUJTGJFE   %PFTUIJTOFX-)4NBUDIUIF3)4GPSBMMJOQVUT
  7. 4PVQFST"QQSPBDI  -PXFS--7.*3UP4PVQFS*3 ↟ 8PSLTCBDLXBSETUISPVHIUIF$'(UPTZOUIFTJ[FQBUIDPOEJUJPOT  4ZOUIFTJ[F4.5-*#GPSNVMBFGPSFBDI4PVQFSGVODUJPO  'JSTUQBTT HFOFSBUFEFQFOEFODZHSBQI

     4FDPOEQBTT WFSJGZFRVJWBMFODF  6TFSFTVMUTUPIBOEXSJUFOFX--7.PQUJNJ[BUJPOT  3FQFBUPODF--7.VQEBUFTUPEJTDPWFSGVSUIFSPQUJNJ[BUJPOT
  8. 0QUJNJ[BUJPO&YBNQMFT %0: i64 = var %1: i64 = mul %0,

    2654435761: i64 %2: i64 = and %1, 1: i64 %3: i1 = ne %2, 0: i64 infer %3
  9. 0QUJNJ[BUJPO&YBNQMFT %0: i64 = var %1: i64 = mul %0,

    2654435761: i64 %2: i64 = and %1, 1: i64 %3: i1 = ne %2, 0: i64 infer %3 %4: i1 = trunc %0 result %4 .VMUJQMJDBUJPOXJUIBOPEEOVNCFSXJMMBMXBZTCF PEEJGUIFPSJHJOBMOVNCFSJTPEE
  10. 0QUJNJ[BUJPO&YBNQMFT %0: i32 = var %1: i32 = xor %0,

    4294967295: i32 %2: i32 = and %1, 8: i32 infer %2
  11. 0QUJNJ[BUJPO&YBNQMFT %0: i32 = var %1: i32 = xor %0,

    4294967295: i32 %2: i32 = and %1, 8: i32 infer %2 %3: i32 = and 8: i32, %0 %4: i32 = xor 8: i32, %3 result %4 *OTUFBEPGJOWFSUJOHBCJUWBMVFBOEUFTUJOHCJU  NBTLUPHFU(%0 & 0b100)BOEUFTUUIFCJUWBMVF 4PVQFSDBVHIUUIJTCZMVDL
  12. 0QUJNJ[BUJPO&YBNQMFT %0: i8 = var %1: i8 = lshr %0,

    3: i8 %2: i1 = eq %1, 0: i8 infer %2
  13. 0QUJNJ[BUJPO&YBNQMFT %0: i8 = var %1: i8 = lshr %0,

    3: i8 %2: i1 = eq %1, 0: i8 infer %2 %3: i32 = ult %0, 8: i32 result %3 "WBMVFTIJGUFESJHIUUJNFTDBOCF[FSPPOMZJGJUJT TNBMMFSUIBO͌
  14. 1PTTJCJMJUJFT ↟ 4VQFSPQUJNJ[BUJPOXJMMTJHOJGJDBOUMZJNQSPWFFYJTUJOHPQUJNJ[BUJPOT ↟ 4PVQFSIBTBMSFBEZJOGPSNFETFWFSBM--7.PQUJNJ[BUJPOT NPTUEFBMJOH XJUICJUNBOJQVMBUJPO ↟ "QQMZJOHWFSJGJDBUJPOUFDIOJRVFTFOBCMFTJODSFEJCMFPQUJNJ[BUJPOT ↟

    4JODF--7.JTDPNNPODVSSFODZ BMM--7.DPNQJMFSTCFOFGJUGSPN4PVQFS ↟ *ODPSQPSBUJOHUIJTJOUPPUIFSDPNQJMFSTXJMMJNQSPWFDPNQJMFSTPWFSBMM ↟ $PNQFUJUJPOJTIFBMUIZ