This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2434:用于获取优化源代码的 tiarmclang 编译器选项

Guru**** 2398695 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1408168/am2434-tiarmclang-compiler-option-to-get-optimized-source-code

器件型号:AM2434

工具与软件:

您好!
目前我遇到了一个问题、在 CCS 中、我的某些断点说没有与它们关联的代码、普通代码、预处理器定义或任何内容。
因此,我认为问题在于我们正在使用优化级别-og ATM (比较 https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/using_compiler/compiler_options/optimization_options.html )。

因此、我切换到-O0并再次尝试运行代码、突然在到达 main 之前获得了中止。

由于在我们仍然无法解释原因的不同情况下我已经遇到了类似的错误、我希望通过将由 tiarmclang 优化的源代码与-og 与原来的源代码进行比较来找到一条线索。
我在这里读到: https://stackoverflow.com/questions/8558541/get-optimized-source-code-from-gcc 在回答3中、有一个 gcc (-fdump-tree-all)的编译器选项可提供优化的源代码。

现在、我要查找类似 tiarmclang 的东西。

感谢你的帮助。


此致

Philip。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我找到了一些东西:

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/using_compiler/compiler_options/diagnostic_options.html

    尽管我仍然不确定在哪里可以获得优化通过的名称。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这些通行证是否也适用于 tiarmclang?

    llvm.org/.../Passes.html

    如果不能、我在哪里可以找到 tiarmclang 的证书。
    当我不知道自己在寻找什么时、我很难提供适当的正则表达。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请考虑这些替代方案。  我相信这些建议会比查看 LLVM 通行证效果更好。   

    添加编译器选项  save-temps .  这会告诉编译器保存编译时它生成的临时文件。  您对汇编文件感兴趣。  它与源文件具有相同的名称、但文件扩展名更改为 (s .

    使用类似于...的命令

    tiarmobjdump --source executive_file.out > interlisted_file.txt

    后面的字中 tiarmobjump 位于同一位置 \bin 加载目录作为编译器 tiarmclang .  选项 -来源 反汇编该文件、并一路交叉列出 C/C++代码。  为了使这项功能正常工作、必须在启用调试的情况下编译可执行文件( g )。   

    为了帮助理解编译器生成的汇编代码、请参阅  tiarmclang 在线手册的 GNU 语法 Arm 汇编语言参考指南部分

    谢谢。此致、

    -George.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的响应、但我不相信看到目标文件、分解确实很有帮助。
    我可以在 CCS 中查看分解。
    我想要了解的是我的代码的哪些部分会如何优化。

    我目前所做的似乎是最好的选择是将以下内容放入我们的 CMakeLists.txt 中:

    set(OPTIMIZE_RECORD "")
    
    # Use for a dump of the executed code optimization actions.
    if(SHOW_CODE_OPTIMIZATION)
        # File where the code optimization action analysis is dumped to.
        set(OPTIMIZE_DUMP_FILE "$ENV{TI_HOME_DIR}/compile_optimize.yml")
        message(STATUS "Dumping code optimization analysis to: ${OPTIMIZE_DUMP_FILE}!")
        if (EXISTS ${OPTIMIZE_DUMP_FILE})
            # Remove to clear content
            file(REMOVE ${OPTIMIZE_DUMP_FILE})
        endif()    
        file(TOUCH ${OPTIMIZE_DUMP_FILE})
        # Compiler options are for tiarmclang. 
        set(OPTIMIZE_RECORD "-fsave-optimization-record;-foptimization-record-file=${OPTIMIZE_DUMP_FILE};-Rpass-analysis=.*;-Rpass=.*")
    endif()
    
    ...
    
    add_compile_options(
        ...
        ${OPTIMIZE_RECORD} 
        ...
    )



    这至少为我提供了一个文件、它告诉我在我的代码库的哪些行中执行了哪种类型的优化。