タグ

gccとoptimizationに関するmasterqのブックマーク (3)

  • KMC Staff Blog:GCC10の最適化によるmemsetでの無限ループの発生

    2020年11月17日 GCC10の最適化によるmemsetでの無限ループの発生 以前、「GCCの最適化による予期せぬ無限ループの発生」という記事を書きました。この時は -fno-builtin-malloc や __asm __volatile("":::"memory"); などで対策できました。 しかし今回、現状最新の GCC 10 で、memset、しかもナイーブな *(char *)s++ = (char)c; みたいな実装ではなく、NetBSD の格的な実装のもので発生し、-fno-builtin や -fno-builtin-memset、-ffreestanding などでも抑制できず、-fno-tree-loop-distribute-patterns というあまり一般的ではないオプションが必要になりました。 これは一見 GCC のオプションが効いてない、バグのように思

    masterq
    masterq 2020/11/17
    -fno-tree-loop-distribute-patternsするとこの最適化を除去できるとのこと。このオプションは-O2に含まれる
  • KMC Staff Blog:GCCの最適化による予期せぬ無限ループの発生

    2019年09月13日 GCCの最適化による予期せぬ無限ループの発生 コンパクトな独自の libc を実装していて、GCC のテストを通したところ、WARNING: program timed out. が原因による FAIL が多発しました。調べた結果、非常に意外な結果だったのでメモします。 問題は、calloc の実装でした。以下のように、全く問題無さそうな簡単なコードです。 #include <stdlib.h> #include <string.h> void *calloc(size_t n, size_t size) { size_t bytes = n * size; void *p = malloc(bytes); if (p) { memset(p, 0, bytes); } return p; } これが、GCC 6.4.0 の arm-eabi で O2 でコンパイル

    masterq
    masterq 2019/09/14
    "この最適化を抑制するためには、-fno-builtin オプションしか無いようです" これは怖すぎる。。。
  • Interprocedural optimization in GCC

    Random thoughts on programming languages, compilers, operating systems, etc. Compilers can do a better job optimizing a function if they can use knowledge of other functions. The obvious case is inlining, but there are many more cases. This post lists the interprocedural optimizations implemented in GCC 7. Many of the optimizations are only relevant for large functions (small functions are inlined

    masterq
    masterq 2017/06/06
    GCC 7での最適化の話。"which are enabled by default at -Os, -O2, and -O3." うぉぉぉ
  • 1