xref: /llvm-project/llvm/test/Transforms/InstCombine/force-opaque-ptr.ll (revision 10f315dc9c96ec2413881ab55a285e35d80def88)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=instcombine < %s | FileCheck %s
3
4@g = global [16 x i16] zeroinitializer
5
6define ptr @gep_constexpr_gv_1() {
7; CHECK-LABEL: @gep_constexpr_gv_1(
8; CHECK-NEXT:    ret ptr getelementptr inbounds nuw (i8, ptr @g, i64 20)
9;
10  ret ptr getelementptr([16 x i16], ptr @g, i64 0, i64 10)
11}
12
13define ptr @gep_constexpr_gv_2() {
14; CHECK-LABEL: @gep_constexpr_gv_2(
15; CHECK-NEXT:    ret ptr getelementptr inbounds nuw (i8, ptr @g, i64 24)
16;
17  ret ptr getelementptr(i32, ptr getelementptr([16 x i16], ptr @g, i64 0, i64 10), i64 1)
18}
19
20; Silly expression to get an inttoptr that does not combine with the GEP.
21define ptr @gep_constexpr_inttoptr() {
22; CHECK-LABEL: @gep_constexpr_inttoptr(
23; CHECK-NEXT:    ret ptr getelementptr (i8, ptr inttoptr (i64 mul (i64 ptrtoint (ptr @g to i64), i64 2) to ptr), i64 20)
24;
25  ret ptr getelementptr([16 x i16], ptr inttoptr (i64 mul (i64 ptrtoint (ptr @g to i64), i64 2) to ptr), i64 0, i64 10)
26}
27