// This test case will cause an internal EK_GPRel64BlockAddress to be
// produced. This was not handled for direct object and an assertion
// to occur. This is a variation on test case test/CodeGen/Mips/do_switch.ll

// RUN: llvm-mc < %s -filetype=obj -triple=mips64-pc-linux -relocation-model=pic -mcpu=mips64 -target-abi=n64

	.text
	.abicalls
	.section	.mdebug.abi64,"",@progbits
	.file	"/home/espindola/llvm/llvm/test/MC/Mips/do_switch.ll"
	.text
	.globl	main
	.align	3
	.type	main,@function
	.set	nomips16
	.ent	main
main:                                   # @main
	.frame	$sp,16,$ra
	.mask 	0x00000000,0
	.fmask	0x00000000,0
	.set	noreorder
	.set	nomacro
	.set	noat
# BB#0:                                 # %entry
	daddiu	$sp, $sp, -16
	lui	$1, %hi(%neg(%gp_rel(main)))
	daddu	$2, $1, $25
	addiu	$1, $zero, 2
	sw	$1, 12($sp)
	lw	$1, 12($sp)
	sltiu	$4, $1, 4
	dsll	$3, $1, 32
	bnez	$4, $BB0_2
	nop
$BB0_1:                                 # %bb4
	addiu	$2, $zero, 4
	jr	$ra
	daddiu	$sp, $sp, 16
$BB0_2:                                 # %entry
	daddiu	$1, $2, %lo(%neg(%gp_rel(main)))
	dsrl	$2, $3, 32
	daddiu	$3, $zero, 8
	dmult	$2, $3
	mflo	$2
	ld	$3, %got_page($JTI0_0)($1)
	daddu	$2, $2, $3
	ld	$2, %got_ofst($JTI0_0)($2)
	daddu	$1, $2, $1
	jr	$1
	nop
$BB0_3:                                 # %bb5
	addiu	$2, $zero, 1
	jr	$ra
	daddiu	$sp, $sp, 16
$BB0_4:                                 # %bb1
	addiu	$2, $zero, 2
	jr	$ra
	daddiu	$sp, $sp, 16
$BB0_5:                                 # %bb2
	addiu	$2, $zero, 0
	jr	$ra
	daddiu	$sp, $sp, 16
$BB0_6:                                 # %bb3
	addiu	$2, $zero, 3
	jr	$ra
	daddiu	$sp, $sp, 16
	.set	at
	.set	macro
	.set	reorder
	.end	main
$tmp0:
	.size	main, ($tmp0)-main
	.section	.rodata,"a",@progbits
	.align	3
$JTI0_0:
	.gpdword	($BB0_3)
	.gpdword	($BB0_4)
	.gpdword	($BB0_5)
	.gpdword	($BB0_6)


	.text
