от
Я нашел бесконечный цикл, во время InstructionCombining оптимизации. Версия кода LLVM: релиз версии 8.0 Тестовая программа: Интернет.ВТОРОЙ (СПЕЦИФИКАЦИЙ CPU2006) Я изменил лязг принудительно Марк не полиморфный класс как полиморфный класс для моих исследовательских целей. Это деталь бесконечном случае петля (ИК-код). Я только доработал лязг (не InstructionCombining пройти). Шаг 1: (применены: fmul по оси Y * (-х) => -(х*г) политика. 1 инструкция -> 2 инструкции)
[Before] 3 = fmul double 9, fsub (double 

Шаг 2 (применены: политика SimplifyAssociativeOrCommutative fmul по. Более конкретно, "порядок операнда таких, что они перечислены справа (наименее сложного) налево (самый сложный))" политики.

[Before] 3 = fmul double bitcast (i64 ptrtoint (i8** getelementptr inbounds ({ [2 x i8*] }, { [2 x i8*] }* @_ZTV5PointILi3EE, i64 0, inrange i32 0, i64 2) to i64) to double), 9, !dbg !3967

[After]  3 = fmul double 9, bitcast (i64 ptrtoint (i8** getelementptr inbounds ({ [2 x i8*] }, { [2 x i8*] }* @_ZTV5PointILi3EE, i64 0, inrange i32 0, i64 2) to i64) to double), !dbg !3967
Шаг 3 (применены: "отрицание fsub раз в константный операнд" политики. -(Х * С) --> Х * (-С))
[Before] 4 = fsub double 

После шага 3, петля бесконечного начала (т. е. Шаг 1 -> Шаг 2 -> Шаг 3 -> Шаг 1 ->Шаг 2 -> Шаг 3 -> ...). 

Не могли бы вы пожалуйста проверить, так ли это кода LLVM пройти баг или моя проблема?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...