1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Checks for a crash we had when two gc.relocate calls would 4*9880d681SAndroid Build Coastguard Worker; relocating identical values 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-i64:64-f80:128-n8:16:32:64-S128" 7*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-pc-linux-gnu" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdeclare void @f() 10*9880d681SAndroid Build Coastguard Workerdeclare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...) 11*9880d681SAndroid Build Coastguard Workerdeclare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32) #3 12*9880d681SAndroid Build Coastguard Workerdeclare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32, i32) #3 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine void @test_gcrelocate_uniqueing(i32 addrspace(1)* %ptr) gc "statepoint-example" { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_gcrelocate_uniqueing 16*9880d681SAndroid Build Coastguard Worker %tok = tail call token (i64, i32, void ()*, i32, i32, ...) 17*9880d681SAndroid Build Coastguard Worker @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @f, i32 0, i32 0, i32 0, i32 2, i32 addrspace(1)* %ptr, i32 undef, i32 addrspace(1)* %ptr, i32 addrspace(1)* %ptr) 18*9880d681SAndroid Build Coastguard Worker %a = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %tok, i32 9, i32 9) 19*9880d681SAndroid Build Coastguard Worker %b = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %tok, i32 10, i32 10) 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine void @test_gcptr_uniqueing(i32 addrspace(1)* %ptr) gc "statepoint-example" { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_gcptr_uniqueing 25*9880d681SAndroid Build Coastguard Worker %ptr2 = bitcast i32 addrspace(1)* %ptr to i8 addrspace(1)* 26*9880d681SAndroid Build Coastguard Worker %tok = tail call token (i64, i32, void ()*, i32, i32, ...) 27*9880d681SAndroid Build Coastguard Worker @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @f, i32 0, i32 0, i32 0, i32 2, i32 addrspace(1)* %ptr, i32 undef, i32 addrspace(1)* %ptr, i8 addrspace(1)* %ptr2) 28*9880d681SAndroid Build Coastguard Worker %a = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %tok, i32 9, i32 9) 29*9880d681SAndroid Build Coastguard Worker %b = call i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %tok, i32 10, i32 10) 30*9880d681SAndroid Build Coastguard Worker ret void 31*9880d681SAndroid Build Coastguard Worker} 32