; 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 = !{}