1*cee313d2SEric Christopher; RUN: opt < %s -rewrite-statepoints-for-gc -spp-print-base-pointers -S 2>&1 | FileCheck %s
2*cee313d2SEric Christopher; RUN: opt < %s -passes=rewrite-statepoints-for-gc -spp-print-base-pointers -S 2>&1 | FileCheck %s
3*cee313d2SEric Christopher
4*cee313d2SEric Christopher; CHECK: derived %select base null
5*cee313d2SEric Christopher
6*cee313d2SEric Christopher@global = external addrspace(1) global i8
7*cee313d2SEric Christopher
8*cee313d2SEric Christopherdefine i8 @test(i1 %cond) gc "statepoint-example" {
9*cee313d2SEric Christopher  %derived1 = getelementptr i8, i8 addrspace(1)* @global, i64 1
10*cee313d2SEric Christopher  %derived2 = getelementptr i8, i8 addrspace(1)* @global, i64 2
11*cee313d2SEric Christopher  %select = select i1 %cond, i8 addrspace(1)* %derived1, i8 addrspace(1)* %derived2
12*cee313d2SEric Christopher  call void @extern()
13*cee313d2SEric Christopher; CHECK-NOT: relocate
14*cee313d2SEric Christopher; CHECK: %load = load i8, i8 addrspace(1)* %select
15*cee313d2SEric Christopher  %load = load i8, i8 addrspace(1)* %select
16*cee313d2SEric Christopher  ret i8 %load
17*cee313d2SEric Christopher}
18*cee313d2SEric Christopher
19*cee313d2SEric Christopherdeclare void @extern() gc "statepoint-example"
20*cee313d2SEric Christopher
21*cee313d2SEric Christopherdeclare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
22