Files
clang-p2996/llvm/test/Transforms/InstSimplify/fold-vscale.ll
Sander de Smalen 84a4caeb84 [InstSimplify] Don't assume parent function when simplifying llvm.vscale.
D106850 introduced a simplification for llvm.vscale by looking at the
surrounding function's vscale_range attributes. The call that's being
simplified may not yet have been inserted into the IR. This happens for
example during function cloning.

This patch fixes the issue by checking if the instruction is in a
parent basic block.
2021-07-29 20:08:08 +01:00

50 lines
1.4 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s
define i64 @vscale_i64_range_none() #0 {
; CHECK-LABEL: @vscale_i64_range_none(
; CHECK-NEXT: [[OUT:%.*]] = call i64 @llvm.vscale.i64()
; CHECK-NEXT: ret i64 [[OUT]]
;
%out = call i64 @llvm.vscale.i64()
ret i64 %out
}
define i64 @vscale_i64_range_1_1() #1 {
; CHECK-LABEL: @vscale_i64_range_1_1(
; CHECK-NEXT: ret i64 1
;
%out = call i64 @llvm.vscale.i64()
ret i64 %out
}
define i32 @vscale_i32_range_2_2() #2 {
; CHECK-LABEL: @vscale_i32_range_2_2(
; CHECK-NEXT: ret i32 2
;
%out = call i32 @llvm.vscale.i32()
ret i32 %out
}
define i64 @vscale_i64_range_2_4() #3 {
; CHECK-LABEL: @vscale_i64_range_2_4(
; CHECK-NEXT: [[OUT:%.*]] = call i64 @llvm.vscale.i64()
; CHECK-NEXT: ret i64 [[OUT]]
;
%out = call i64 @llvm.vscale.i64()
ret i64 %out
}
; Function Attrs: nofree nosync nounwind readnone willreturn
declare i64 @llvm.vscale.i64() #0
; Function Attrs: nofree nosync nounwind readnone willreturn
declare i32 @llvm.vscale.i32() #0
attributes #0 = { nofree nosync nounwind readnone willreturn }
attributes #1 = { mustprogress nofree nosync nounwind uwtable vscale_range(1,1) }
attributes #2 = { mustprogress nofree nosync nounwind uwtable vscale_range(2,2) }
attributes #3 = { mustprogress nofree nosync nounwind uwtable vscale_range(2,4) }