| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -S -O3 < %s | FileCheck %s |
| |
| ; A miscompilation found on https://github.com/llvm/llvm-project/issues/64289. |
| ; 1. PostOrderFunctionAttrsPass added readonly to the parameter. |
| ; 2. TailCallElimPass modified the parameter but kept readonly. |
| ; 3. LICMPass incorrectly hoisted the load instruction. |
| |
| define void @pr64289(ptr noalias byval(i64) %x) { |
| ; CHECK-LABEL: @pr64289( |
| ; CHECK-NEXT: start: |
| ; CHECK-NEXT: ret void |
| ; |
| start: |
| %new_x = alloca i64, align 8 |
| %x_val = load i64, ptr %x, align 8 |
| %is_zero = icmp eq i64 %x_val, 0 |
| br i1 %is_zero, label %end, label %recurse |
| |
| recurse: |
| store i64 0, ptr %new_x, align 8 |
| call void @pr64289(ptr %new_x) |
| br label %end |
| |
| end: |
| ret void |
| } |