Add trap codes to the Cretonne IL.

The trap and trapz/trapnz instructions now take a trap code immediate
operand which indicates the reason for trapping.
This commit is contained in:
Jakob Stoklund Olesen
2017-09-20 13:58:57 -07:00
parent 0f21fd342a
commit e8723be33f
28 changed files with 199 additions and 62 deletions

View File

@@ -369,5 +369,5 @@ ebb1:
; asm: ebb2:
ebb2:
trap ; bin: 0f 0b
trap user0 ; bin: 0f 0b
}

View File

@@ -861,5 +861,5 @@ ebb0:
; asm: movl %r10d, %ecx
[-,%rcx] v32 = uextend.i64 v13 ; bin: 44 89 d1
trap ; bin: 0f 0b
trap user0 ; bin: 0f 0b
}

View File

@@ -9,22 +9,22 @@ isa intel
function %cond_trap(i32) {
ebb0(v1: i32):
trapz v1
trapz v1, user67
return
; check: $ebb0($v1: i32):
; nextln: brnz $v1, $(new=$EBB)
; nextln: trap
; nextln: trap user67
; check: $new:
; nextln: return
}
function %cond_trap2(i32) {
ebb0(v1: i32):
trapnz v1
trapnz v1, int_ovf
return
; check: $ebb0($v1: i32):
; nextln: brz $v1, $(new=$EBB)
; nextln: trap
; nextln: trap int_ovf
; check: $new:
; nextln: return
}
@@ -32,11 +32,11 @@ ebb0(v1: i32):
function %cond_trap_b1(i32) {
ebb0(v1: i32):
v2 = icmp_imm eq v1, 6
trapz v2
trapz v2, user7
return
; check: $ebb0($v1: i32):
; check: brnz $v2, $(new=$EBB)
; nextln: trap
; nextln: trap user7
; check: $new:
; nextln: return
}
@@ -44,11 +44,11 @@ ebb0(v1: i32):
function %cond_trap2_b1(i32) {
ebb0(v1: i32):
v2 = icmp_imm eq v1, 6
trapnz v2
trapnz v2, user9
return
; check: $ebb0($v1: i32):
; check: brz $v2, $(new=$EBB)
; nextln: trap
; nextln: trap user9
; check: $new:
; nextln: return
}

View File

@@ -64,7 +64,7 @@ ebb0(v0: i32, v999: i64):
; Boundscheck code
; check: $(oob=$V) = icmp
; nextln: brz $oob, $(ok=$EBB)
; nextln: trap
; nextln: trap heap_oob
; check: $ok:
; Checks here are assuming that no pipehole opts fold the load offsets.
; nextln: $(xoff=$V) = uextend.i64 $v0