(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))})
  ]
)