xref: /llvm-project/llvm/test/Transforms/ConstraintElimination/geps-i32-pointer-indexes.ll (revision 13ffde316a8541d77116bd18f73efada236617f3)
1*eefd0858SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*eefd0858SFlorian Hahn; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
3*eefd0858SFlorian Hahn
4*eefd0858SFlorian Hahntarget datalayout = "p:32:32:32"
5*eefd0858SFlorian Hahn
6*eefd0858SFlorian Hahndeclare void @llvm.assume(i1)
7*eefd0858SFlorian Hahn
8*eefd0858SFlorian Hahndefine i1 @gep_idx_implicit_truncate(ptr %dst, i64 %off) {
9*eefd0858SFlorian Hahn; CHECK-LABEL: @gep_idx_implicit_truncate(
10*eefd0858SFlorian Hahn; CHECK-NEXT:    [[POS:%.*]] = icmp sge i64 [[OFF:%.*]], 0
11*eefd0858SFlorian Hahn; CHECK-NEXT:    call void @llvm.assume(i1 [[POS]])
12*eefd0858SFlorian Hahn; CHECK-NEXT:    [[GEP_OFF:%.*]] = getelementptr inbounds i8, ptr [[DST:%.*]], i64 [[OFF]]
13*eefd0858SFlorian Hahn; CHECK-NEXT:    ret i1 true
14*eefd0858SFlorian Hahn;
15*eefd0858SFlorian Hahn  %pos = icmp sge i64 %off, 0
16*eefd0858SFlorian Hahn  call void @llvm.assume(i1 %pos)
17*eefd0858SFlorian Hahn  %gep.off = getelementptr inbounds i8, ptr %dst, i64 %off
18*eefd0858SFlorian Hahn  %cmp = icmp ule ptr %dst, %gep.off
19*eefd0858SFlorian Hahn  ret i1 %cmp
20*eefd0858SFlorian Hahn}
21*eefd0858SFlorian Hahn
22*eefd0858SFlorian Hahndefine i1 @gep_idx_explicit_truncate(ptr %dst, i64 %off) {
23*eefd0858SFlorian Hahn; CHECK-LABEL: @gep_idx_explicit_truncate(
24*eefd0858SFlorian Hahn; CHECK-NEXT:    [[POS:%.*]] = icmp sge i64 [[OFF:%.*]], 0
25*eefd0858SFlorian Hahn; CHECK-NEXT:    call void @llvm.assume(i1 [[POS]])
26*eefd0858SFlorian Hahn; CHECK-NEXT:    [[T:%.*]] = trunc i64 [[OFF]] to i32
27*eefd0858SFlorian Hahn; CHECK-NEXT:    [[GEP_OFF:%.*]] = getelementptr inbounds i8, ptr [[DST:%.*]], i32 [[T]]
28*eefd0858SFlorian Hahn; CHECK-NEXT:    [[CMP:%.*]] = icmp ule ptr [[DST]], [[GEP_OFF]]
29*eefd0858SFlorian Hahn; CHECK-NEXT:    ret i1 [[CMP]]
30*eefd0858SFlorian Hahn;
31*eefd0858SFlorian Hahn  %pos = icmp sge i64 %off, 0
32*eefd0858SFlorian Hahn  call void @llvm.assume(i1 %pos)
33*eefd0858SFlorian Hahn  %t = trunc i64 %off to i32
34*eefd0858SFlorian Hahn  %gep.off = getelementptr inbounds i8, ptr %dst, i32 %t
35*eefd0858SFlorian Hahn  %cmp = icmp ule ptr %dst, %gep.off
36*eefd0858SFlorian Hahn  ret i1 %cmp
37*eefd0858SFlorian Hahn}
38