1. Си / Говнокод #25997

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    // https://godbolt.org/z/dMT7v3
    
    unsigned div_eq(unsigned a, unsigned b)
    {
      ALWAYS_TRUE(a == b);
      return a/b;
    }
    
    unsigned div(unsigned a, unsigned b)
    {
      return a/b;
    }
    
    
    int test_array(unsigned char a[10])
    {
      for (int i = 1; i < 10; i++)
      {
        ALWAYS_TRUE(a[i-1] <= a[i]);
      }
      return a[0] <= a[2];
    }

    Refinement type
    Можно этой хуйней ассерты позаменять попробовать, и компилятор возможно что-то сможет за счет этого соптимизировать

    Запостил: j123123, 26 Октября 2019

    Комментарии (6) RSS

    • А, две верхние строчки забыл
      #define IMPOSSIBLE(a) if(a) __builtin_unreachable()
      #define ALWAYS_TRUE(a) IMPOSSIBLE(!(a))

      Clang кстати на основе этой хуйни оптимизировать не хочет, поэтому я за GCC
      Ответить
    • Интересно. С «-O2» div_eq() оптимизируется, а test_array() — нет.
      Ответить
      • А с -O9?
        Ответить
        • А с -O9 программа работает настолько быстро, что вычисляет результат ещё до запуска и вызывает пространственно-временной парадокс, приводящий к уничтожению текущей вселенной и переходу в другую ветвь, в которой парадокс отсутствует. Именно поэтому в нашей вселенной -O9 синонимично -O3.
          Ответить

    Добавить комментарий