#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int day1_a(char *);
int day1_b(char *);
int /*<<< orphan*/ printf(char *, int);
void day1() {
  char *input =
      "567298753335395619962968394156452864626256711743346154774779392832295864"
      "677983248468917415191826155168922175616559889842873678219451162782935571"
      "849372396132327213645251798747135138188194688352824861161125865619981299"
      "863268266874968358851536294699441585233719671847621916212497883653734892"
      "459195718882792975341788494213384466463696974254771722825573995931635185"
      "273159829252983788599278181513187618357846113579131528713524354165985373"
      "434337661841995277616554482971767698889768414132813834838288269967295786"
      "614652475987923655593572365532674371354293169347782428928354246863952227"
      "164325721283324816539195768622631124651797831925397727666382547914432115"
      "571286694625599263487615882285538233145264995328378886324819233824594396"
      "626919742147455577913516863726327957984288534715228727567981157659437653"
      "522616789498122686622298752241578524487588255641495672497634162712355721"
      "483787387272361839552973534927324168654828754976399365337953944543531969"
      "882546528981766329443645819486727862397874598179928378923755524272829133"
      "753849861692981726821169864923664612789998283952378483775286345881996548"
      "514981295912188477184995472325936577815178871994188812861855245587936991"
      "951131973552562119818563434253884846246183333291798629744538851571746316"
      "851512373245557614344745483584956575777332536746976338375767793874831996"
      "897131226787161995165726791381724248555977158216729579425944125628416835"
      "629278556885852718412223126246519361212796168551391383527482389259692378"
      "661329974734725925482353126218532827436752926586885651218513532965263593"
      "837326675996411986349479822224553675879238978981864665528785617353447955"
      "136411597681145967712359274737529631366725341369882365521825416819616288"
      "343738971816774387121637316486542645879423949622485897169487715959121577"
      "293839682743528973416585397526752129157443656719347381424798187773522337"
      "696412535999255588513781664738213959664685641742461784798185553291487225"
      "168671939434176432439525455678227742632633144198173755726258176241254484"
      "968947228164583595766721738433443539157298522828653757438883483569341682"
      "141965596745613739546564924925657286651698431834448268493662548631171852"
      "5523265165";
  int a_ret = day1_a(input);
  printf("day1_a: %d\n", a_ret);
  int b_ret = day1_b(input);
  printf("day1_b: %d\n", b_ret);
}


x86 assembly (clang, -O0):
<day1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
lea    0xec1(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <day1_a@plt>
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%esi
lea    0x16da(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rdi
call   1050 <day1_b@plt>
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%esi
lea    0x16cb(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<day1>:
push   %rbx
lea    0xec8(%rip),%rbx
mov    %rbx,%rdi
call   1040 <day1_a@plt>
lea    0x16ec(%rip),%rdi
mov    %eax,%esi
call   1030 <printf@plt>
mov    %rbx,%rdi
call   1050 <day1_b@plt>
lea    0x16e2(%rip),%rdi
mov    %eax,%esi
pop    %rbx
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [2099 x i8] c"5672987533353956199629683941564528646262567117433461547747793928322958646779832484689174151918261551689221756165598898428736782194511627829355718493723961323272136452517987471351381881946883528248611611258656199812998632682668749683588515362946994415852337196718476219162124978836537348924591957188827929753417884942133844664636969742547717228255739959316351852731598292529837885992781815131876183578461135791315287135243541659853734343376618419952776165544829717676988897684141328138348382882699672957866146524759879236555935723655326743713542931693477824289283542468639522271643257212833248165391957686226311246517978319253977276663825479144321155712866946255992634876158822855382331452649953283788863248192338245943966269197421474555779135168637263279579842885347152287275679811576594376535226167894981226866222987522415785244875882556414956724976341627123557214837873872723618395529735349273241686548287549763993653379539445435319698825465289817663294436458194867278623978745981799283789237555242728291337538498616929817268211698649236646127899982839523784837752863458819965485149812959121884771849954723259365778151788719941888128618552455879369919511319735525621198185634342538848462461833332917986297445388515717463168515123732455576143447454835849565757773325367469763383757677938748319968971312267871619951657267913817242485559771582167295794259441256284168356292785568858527184122231262465193612127961685513913835274823892596923786613299747347259254823531262185328274367529265868856512185135329652635938373266759964119863494798222245536758792389789818646655287856173534479551364115976811459677123592747375296313667253413698823655218254168196162883437389718167743871216373164865426458794239496224858971694877159591215772938396827435289734165853975267521291574436567193473814247981877735223376964125359992555885137816647382139596646856417424617847981855532914872251686719394341764324395254556782277426326331441981737557262581762412544849689472281645835957667217384334435391572985228286537574388834835693416821419655967456137395465649249256572866516984318344482684936625486311718525523265165\00"
@.str.1 = [12 x i8] c"day1_a: %d\0A\00"
@.str.2 = [12 x i8] c"day1_b: %d\0A\00"
define void @day1() {
%1 = alloca i8*
%2 = alloca i32
%3 = alloca i32
store i8* getelementptr inbounds ([2099 x i8], [2099 x i8]* @.str, i64 0, i64 0), i8** %1
%4 = load i8*, i8** %1
%5 = call i32 @day1_a(i8* %4)
store i32 %5, i32* %2
%6 = load i32, i32* %2
%7 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 %6)
%8 = load i8*, i8** %1
%9 = call i32 @day1_b(i8* %8)
store i32 %9, i32* %3
%10 = load i32, i32* %3
%11 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i32 %10)
ret void
}

LLVM IR (-O2):
@.str = [2099 x i8] c"5672987533353956199629683941564528646262567117433461547747793928322958646779832484689174151918261551689221756165598898428736782194511627829355718493723961323272136452517987471351381881946883528248611611258656199812998632682668749683588515362946994415852337196718476219162124978836537348924591957188827929753417884942133844664636969742547717228255739959316351852731598292529837885992781815131876183578461135791315287135243541659853734343376618419952776165544829717676988897684141328138348382882699672957866146524759879236555935723655326743713542931693477824289283542468639522271643257212833248165391957686226311246517978319253977276663825479144321155712866946255992634876158822855382331452649953283788863248192338245943966269197421474555779135168637263279579842885347152287275679811576594376535226167894981226866222987522415785244875882556414956724976341627123557214837873872723618395529735349273241686548287549763993653379539445435319698825465289817663294436458194867278623978745981799283789237555242728291337538498616929817268211698649236646127899982839523784837752863458819965485149812959121884771849954723259365778151788719941888128618552455879369919511319735525621198185634342538848462461833332917986297445388515717463168515123732455576143447454835849565757773325367469763383757677938748319968971312267871619951657267913817242485559771582167295794259441256284168356292785568858527184122231262465193612127961685513913835274823892596923786613299747347259254823531262185328274367529265868856512185135329652635938373266759964119863494798222245536758792389789818646655287856173534479551364115976811459677123592747375296313667253413698823655218254168196162883437389718167743871216373164865426458794239496224858971694877159591215772938396827435289734165853975267521291574436567193473814247981877735223376964125359992555885137816647382139596646856417424617847981855532914872251686719394341764324395254556782277426326331441981737557262581762412544849689472281645835957667217384334435391572985228286537574388834835693416821419655967456137395465649249256572866516984318344482684936625486311718525523265165\00"
@.str.1 = [12 x i8] c"day1_a: %d\0A\00"
@.str.2 = [12 x i8] c"day1_b: %d\0A\00"
define void @day1() {
%1 = tail call i32 @day1_a(i8* getelementptr inbounds ([2099 x i8], [2099 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 %1)
%3 = tail call i32 @day1_b(i8* getelementptr inbounds ([2099 x i8], [2099 x i8]* @.str, i64 0, i64 0))
%4 = tail call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i32 %3)
ret void
}