| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s |
| ; |
| ; This test case is reduced from RangeConstraintManager.cpp in a ASan build. |
| ; It crashes reduceLoadWidth in DAGCombiner.cpp. Preservation of range |
| ; metadata must ensure that ConstantRange truncation is strictly smaller. |
| |
| define i8 @narrow_load_metadata(ptr %valptr) { |
| ; CHECK-LABEL: narrow_load_metadata: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movzbl (%rdi), %eax |
| ; CHECK-NEXT: movb %al, 4(%rdi) |
| ; CHECK-NEXT: movl $0, (%rdi) |
| ; CHECK-NEXT: retq |
| entry: |
| %val = load i8, ptr %valptr, align 4, !range !0, !noundef !1 |
| %retval.sroa.1.0.insert.ext.i = zext i8 %val to i64 |
| %retval.sroa.1.0.insert.shift.i = shl i64 %retval.sroa.1.0.insert.ext.i, 32 |
| %coerce.val.ii = trunc i64 %retval.sroa.1.0.insert.shift.i to i40 |
| store i40 %coerce.val.ii, ptr %valptr, align 4 |
| ret i8 %val |
| } |
| |
| !0 = !{i8 0, i8 2} |
| !1 = !{} |