(CommandList children: [ (FuncDef name: check_nofold body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:func_addr_1) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(grep)} {($ VSub_Number '$2')} {($ VSub_Number '$1')}) (C {(awk)} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [79 93] ) } spids: [78] ) ] spids: [78] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:func_addr_2) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(grep)} {($ VSub_Number '$3')} {($ VSub_Number '$1')}) (C {(awk)} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [97 111] ) } spids: [96] ) ] spids: [96] ) (If arms: [ (if_arm cond: [ (C {(Lit_Other '[')} {($ VSub_Name '$func_addr_1')} {(Lit_Other '=')} {($ VSub_Name '$func_addr_2')} {(Lit_Other ']')} ) ] action: [ (C {(echo)} {(DQ ('Safe Identical Code Folding folded'))} {($ VSub_Number '$2')} {(DQ (and))} {($ VSub_Number '$3')} ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 127] ) ] spids: [16777215 150] ) ] spids: [75] ) spids: [71 74] ) (FuncDef name: check_fold body: (BraceGroup children: [ (C {(awk)} { (DQ ('\n') ('BEGIN { discard = 0; }\n') ('/^Discarded input/ { discard = 1; }\n') ('/^Memory map/ { discard = 0; }\n') ('/.*') (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (.text) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ('..*(') ($ VSub_Number '$2') ('|') ($ VSub_Number '$3') (').*/ { act[discard] = act[discard] ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('0; }\n') ('END {\n') (' # printf ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (kept) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' act[0] ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (nfolded) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' act[1] ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (n) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (';\n') (' if (length(act[0]) == 0 || length(act[1]) == 0)\n') ('\t{\n') ('\t printf ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('Safe Identical Code Folding did not fold ') ($ VSub_Number '$2') (' and ') ($ VSub_Number '$3') (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (n) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ('\t exit 1;\n') ('\t}\n') (' }') ) } {($ VSub_Number '$1')} ) ] spids: [159] ) spids: [155 158] ) (FuncDef name: arch_specific_safe_fold body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:grep_x86) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(grep)} {(-q)} {(-e)} {(DQ ('Advanced Micro Devices X86-64'))} {(-e)} {(DQ ('Intel 80386'))} {(-e)} {(DQ (ARM))} {(-e)} {(DQ (TILE))} {(-e)} {(DQ (PowerPC))} {(-e)} {(DQ (AArch64))} {(-e)} {(DQ ('IBM S/390'))} {($ VSub_Number '$2')} ) ] ) left_token: <Left_Backtick '`'> spids: [230 278] ) } spids: [229] ) ] spids: [229] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(check_fold)} {($ VSub_Number '$3')} {($ VSub_Number '$4')} {($ VSub_Number '$5')} ) ] spids: [16777215 295] ) ] else_action: [ (C {(check_nofold)} {($ VSub_Number '$1')} {($ VSub_Number '$4')} {($ VSub_Number '$5')}) ] spids: [307 319] ) ] spids: [226] ) spids: [222 225] ) (C {(arch_specific_safe_fold)} {(icf_safe_test_1.stdout)} {(icf_safe_test_2.stdout)} {(icf_safe_test.map)} {(DQ (kept_func_1))} {(DQ (kept_func_2))} ) (C {(check_fold)} {(icf_safe_test.map)} {(DQ (_ZN1AD2Ev))} {(DQ (_ZN1AC2Ev))}) (C {(check_nofold)} {(icf_safe_test_1.stdout)} {(DQ (kept_func_3))} {(DQ (kept_func_1))}) (C {(check_nofold)} {(icf_safe_test_1.stdout)} {(DQ (kept_func_3))} {(DQ (kept_func_2))}) ] )