120 changes: 60 additions & 60 deletions llvm/test/CodeGen/X86/sad.ll

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/select-neg.ll
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ define i32 @function(i32 %arg1) {
; CHECK-NEXT: negl %eax
; CHECK-NEXT: retl
entry:
%0 = xor i32 %arg1, xor (i32 ptrtoint (i32* @value1 to i32), i32 -1)
%0 = xor i32 %arg1, xor (i32 ptrtoint (ptr @value1 to i32), i32 -1)
%.neg = add i32 %0, 1
ret i32 %.neg
}
210 changes: 105 additions & 105 deletions llvm/test/CodeGen/X86/sse-intrinsics-fast-isel.ll

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions llvm/test/CodeGen/X86/stack-protector-dbginfo.ll
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
define i32 @_Z18read_response_sizev() #0 !dbg !9 {
entry:
tail call void @llvm.dbg.value(metadata !22, i64 0, metadata !23, metadata !DIExpression()), !dbg !39
%0 = load i64, ptr getelementptr inbounds ({ i64, [56 x i8] }, ptr @a, i32 0, i32 0), align 8, !dbg !40
%0 = load i64, ptr @a, align 8, !dbg !40
tail call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !64, metadata !DIExpression()), !dbg !71
%1 = trunc i64 %0 to i32
ret i32 %1
Expand Down Expand Up @@ -60,7 +60,7 @@ attributes #0 = { sspreq }
!19 = !DILocalVariable(name: "c", line: 29, scope: !9, file: !10, type: !13)
!20 = !{}
!21 = !{i32 2, !"Dwarf Version", i32 2}
!22 = !{ptr getelementptr inbounds ({ i64, [56 x i8] }, ptr @a, i32 0, i32 0)}
!22 = !{ptr @a}
!23 = !DILocalVariable(name: "p2", line: 12, arg: 2, scope: !24, file: !10, type: !32)
!24 = distinct !DISubprogram(name: "min<unsigned long long>", linkageName: "_ZN3__13minIyEERKT_S3_RS1_", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 12, file: !1, scope: !25, type: !27, templateParams: !33, retainedNodes: !35)
!25 = !DINamespace(name: "__1", scope: null)
Expand Down
44 changes: 21 additions & 23 deletions llvm/test/CodeGen/X86/statepoint-cmp-sunk-past-statepoint.ll
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

declare void @foo() gc "statepoint-example"
declare void @bar(i8 addrspace(1)*) gc "statepoint-example"
declare void @bar(ptr addrspace(1)) gc "statepoint-example"

declare i32* @fake_personality_function()
declare ptr @fake_personality_function()

; Simplest possible test demonstrating the problem

Expand All @@ -29,15 +29,15 @@ declare i32* @fake_personality_function()
; CHECK: RET 0
; CHECK: bb.2
; CHECK: RET 0
define void @test(i8 addrspace(1)* %a) gc "statepoint-example" {
define void @test(ptr addrspace(1) %a) gc "statepoint-example" {
entry:
%not7 = icmp eq i8 addrspace(1)* %a, null
%statepoint_token1745 = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2, i32 5, void ()* nonnull elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) [ "deopt"(), "gc-live"(i8 addrspace(1)* %a) ]
%not7 = icmp eq ptr addrspace(1) %a, null
%statepoint_token1745 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2, i32 5, ptr nonnull elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) [ "deopt"(), "gc-live"(ptr addrspace(1) %a) ]
br i1 %not7, label %zero, label %not_zero

not_zero:
%a.relocated = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %statepoint_token1745, i32 0, i32 0) ; (%a, %a)
%statepoint_token1752 = call token (i64, i32, void (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidp1i8f(i64 2, i32 5, void (i8 addrspace(1)*)* nonnull elementtype(void (i8 addrspace(1)*)) @bar, i32 1, i32 0, i8 addrspace(1)* %a.relocated, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
%a.relocated = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %statepoint_token1745, i32 0, i32 0) ; (%a, %a)
%statepoint_token1752 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2, i32 5, ptr nonnull elementtype(void (ptr addrspace(1))) @bar, i32 1, i32 0, ptr addrspace(1) %a.relocated, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
ret void

zero:
Expand Down Expand Up @@ -66,31 +66,31 @@ zero:
; CHECK: TEST64rr killed %1, %1, implicit-def $eflags
; CHECK: JCC_1 %bb.1, 5, implicit killed $eflags
; CHECK: JMP_1 %bb.6
define void @test2(i8 addrspace(1)* %this, i32 %0, i32 addrspace(1)* %p0, i8 addrspace(1)* %p1) gc "statepoint-example" personality i32* ()* @fake_personality_function {
define void @test2(ptr addrspace(1) %this, i32 %0, ptr addrspace(1) %p0, ptr addrspace(1) %p1) gc "statepoint-example" personality ptr @fake_personality_function {
preheader:
br label %loop.head

loop.head:
%phi1 = phi i32 addrspace(1)* [ %p0, %preheader ], [ %addr.i.i46797.remat64523, %tail ]
%v1 = phi i8 addrspace(1)* [ %p1, %preheader ], [ %v3, %tail ]
%not3= icmp ne i32 addrspace(1)* %phi1, null
%phi1 = phi ptr addrspace(1) [ %p0, %preheader ], [ %addr.i.i46797.remat64523, %tail ]
%v1 = phi ptr addrspace(1) [ %p1, %preheader ], [ %v3, %tail ]
%not3= icmp ne ptr addrspace(1) %phi1, null
br i1 %not3, label %BB1, label %BB3

BB3:
%token1 = call token (i64, i32, i8 addrspace(1)* ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8f(i64 2882400000, i32 0, i8 addrspace(1)* ()* elementtype(i8 addrspace(1)* ()) undef, i32 0, i32 0, i32 0, i32 0) [ "deopt"(), "gc-live"(i8 addrspace(1)* %v1) ]
%v2 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %token1, i32 0, i32 0) ; (%v1, %v1)
%cond = icmp eq i8 addrspace(1)* null, %v2
%token2 = invoke token (i64, i32, i8 addrspace(1)* ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8f(i64 2882400000, i32 0, i8 addrspace(1)* ()* elementtype(i8 addrspace(1)* ()) undef, i32 0, i32 0, i32 0, i32 0) [ "deopt"(), "gc-live"(i8 addrspace(1)* %v2, i32 addrspace(1)* %phi1) ]
%token1 = call token (i64, i32, ptr addrspace(1) ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr addrspace(1) ()* elementtype(ptr addrspace(1) ()) undef, i32 0, i32 0, i32 0, i32 0) [ "deopt"(), "gc-live"(ptr addrspace(1) %v1) ]
%v2 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %token1, i32 0, i32 0) ; (%v1, %v1)
%cond = icmp eq ptr addrspace(1) null, %v2
%token2 = invoke token (i64, i32, ptr addrspace(1) ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr addrspace(1) ()* elementtype(ptr addrspace(1) ()) undef, i32 0, i32 0, i32 0, i32 0) [ "deopt"(), "gc-live"(ptr addrspace(1) %v2, ptr addrspace(1) %phi1) ]
to label %BB2 unwind label %BB6

BB2:
%v3 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %token2, i32 0, i32 0) ; (%v2, %v2)
%.remat64522 = getelementptr inbounds i8, i8 addrspace(1)* %v3, i64 8
%addr.i.i46797.remat64523 = bitcast i8 addrspace(1)* %.remat64522 to i32 addrspace(1)*
%v3 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %token2, i32 0, i32 0) ; (%v2, %v2)
%.remat64522 = getelementptr inbounds i8, ptr addrspace(1) %v3, i64 8
%addr.i.i46797.remat64523 = bitcast ptr addrspace(1) %.remat64522 to ptr addrspace(1)
br i1 undef, label %BB4, label %tail

BB4:
%dummy = ptrtoint i64* undef to i64
%dummy = ptrtoint ptr undef to i64
br label %tail

tail:
Expand All @@ -107,7 +107,5 @@ BB6:
}


declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32 immarg, i32 immarg) #5
declare token @llvm.experimental.gc.statepoint.p0f_p1i8f(i64 immarg, i32 immarg, i8 addrspace(1)* ()*, i32 immarg, i32 immarg, ...)
declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 immarg, i32 immarg, void ()*, i32 immarg, i32 immarg, ...)
declare token @llvm.experimental.gc.statepoint.p0f_isVoidp1i8f(i64 immarg, i32 immarg, void (i8 addrspace(1)*)*, i32 immarg, i32 immarg, ...)
declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32 immarg, i32 immarg) #5
declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr addrspace(1) ()*, i32 immarg, i32 immarg, ...)
48 changes: 24 additions & 24 deletions llvm/test/CodeGen/X86/tail-dup-merge-loop-headers.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s

; Function Attrs: nounwind uwtable
define void @tail_dup_merge_loops(i32 %a, i8* %b, i8* %c) local_unnamed_addr #0 {
define void @tail_dup_merge_loops(i32 %a, ptr %b, ptr %c) local_unnamed_addr #0 {
; CHECK-LABEL: tail_dup_merge_loops:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: jmp .LBB0_1
Expand Down Expand Up @@ -34,29 +34,29 @@ entry:
br label %outer_loop_top

outer_loop_top: ; preds = %inner_loop_exit, %entry
%dst.0.ph.i = phi i8* [ %b, %entry ], [ %scevgep679.i, %inner_loop_exit ]
%dst.0.ph.i = phi ptr [ %b, %entry ], [ %scevgep679.i, %inner_loop_exit ]
br i1 %notlhs674.i, label %exit, label %inner_loop_preheader

inner_loop_preheader: ; preds = %outer_loop_top
br label %inner_loop_top

inner_loop_top: ; preds = %inner_loop_latch, %inner_loop_preheader
%dst.0.i = phi i8* [ %inc, %inner_loop_latch ], [ %dst.0.ph.i, %inner_loop_preheader ]
%var = load i8, i8* %dst.0.i
%dst.0.i = phi ptr [ %inc, %inner_loop_latch ], [ %dst.0.ph.i, %inner_loop_preheader ]
%var = load i8, ptr %dst.0.i
%tobool1.i = icmp slt i8 %var, 0
br label %inner_loop_test

inner_loop_test: ; preds = %inner_loop_top
br i1 %tobool1.i, label %inner_loop_exit, label %inner_loop_latch

inner_loop_exit: ; preds = %inner_loop_test
%scevgep.i = getelementptr i8, i8* %dst.0.i, i64 1
%scevgep679.i = getelementptr i8, i8* %scevgep.i, i64 0
%scevgep.i = getelementptr i8, ptr %dst.0.i, i64 1
%scevgep679.i = getelementptr i8, ptr %scevgep.i, i64 0
br label %outer_loop_top

inner_loop_latch: ; preds = %inner_loop_test
%cmp75.i = icmp ult i8* %dst.0.i, %c
%inc = getelementptr i8, i8* %dst.0.i, i64 2
%cmp75.i = icmp ult ptr %dst.0.i, %c
%inc = getelementptr i8, ptr %dst.0.i, i64 2
br label %inner_loop_top

exit: ; preds = %outer_loop_top
Expand Down Expand Up @@ -85,7 +85,7 @@ exit: ; preds = %outer_loop_top
; The rest of the blocks in the function are noise unfortunately. Bugpoint
; couldn't shrink the test any further.

define i32 @loop_shared_header(i8* %exe, i32 %exesz, i32 %headsize, i32 %min, i32 %wwprva, i32 %e_lfanew, i8* readonly %wwp, i32 %wwpsz, i16 zeroext %sects) local_unnamed_addr #0 {
define i32 @loop_shared_header(ptr %exe, i32 %exesz, i32 %headsize, i32 %min, i32 %wwprva, i32 %e_lfanew, ptr readonly %wwp, i32 %wwpsz, i16 zeroext %sects) local_unnamed_addr #0 {
; CHECK-LABEL: loop_shared_header:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: pushq %rbp
Expand Down Expand Up @@ -202,23 +202,23 @@ define i32 @loop_shared_header(i8* %exe, i32 %exesz, i32 %headsize, i32 %min, i3
; CHECK-NEXT: .LBB1_25: # %wunpsect.exit.thread.loopexit389
; CHECK-NEXT: .LBB1_26: # %wunpsect.exit.thread.loopexit391
entry:
%0 = load i32, i32* undef, align 4
%0 = load i32, ptr undef, align 4
%mul = shl nsw i32 %0, 2
br i1 undef, label %if.end19, label %cleanup

if.end19: ; preds = %entry
%conv = zext i32 %mul to i64
%call = tail call i8* @cli_calloc(i64 %conv, i64 1)
%call = tail call ptr @cli_calloc(i64 %conv, i64 1)
%1 = icmp eq i32 %exesz, 0
%notrhs = icmp eq i32 %0, 0
%or.cond117.not = or i1 %1, %notrhs
%or.cond202 = or i1 %or.cond117.not, undef
%cmp35 = icmp ult i8* %call, %exe
%cmp35 = icmp ult ptr %call, %exe
%or.cond203 = or i1 %or.cond202, %cmp35
br i1 %or.cond203, label %cleanup, label %if.end50

if.end50: ; preds = %if.end19
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %call, i8* undef, i64 %conv, i1 false)
tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull %call, ptr undef, i64 %conv, i1 false)
%cmp1.i.i = icmp ugt i32 %mul, 3
br i1 %cmp1.i.i, label %shared_preheader, label %wunpsect.exit.thread.loopexit391

Expand All @@ -227,7 +227,7 @@ shared_preheader: ; preds = %if.end50

outer_loop_header: ; preds = %outer_loop_latch, %shared_preheader
%bits.1.i = phi i8 [ 32, %shared_preheader ], [ %bits.43.i, %outer_loop_latch ]
%dst.0.ph.i = phi i8* [ undef, %shared_preheader ], [ %scevgep679.i, %outer_loop_latch ]
%dst.0.ph.i = phi ptr [ undef, %shared_preheader ], [ %scevgep679.i, %outer_loop_latch ]
%2 = icmp eq i32 %0, 0
br i1 %2, label %while.cond.us1412.i, label %shared_loop_header

Expand All @@ -241,24 +241,24 @@ if.end41.us1436.i: ; preds = %while.cond.us1412.i
unreachable

shared_loop_header: ; preds = %dup_early2, %dup_early1
%dst.0.i = phi i8* [ undef, %inner_loop_body ], [ %dst.0.ph.i, %outer_loop_header ], [ undef, %dead_block ]
%cmp3.i1172.i = icmp ult i8* null, %call
%dst.0.i = phi ptr [ undef, %inner_loop_body ], [ %dst.0.ph.i, %outer_loop_header ], [ undef, %dead_block ]
%cmp3.i1172.i = icmp ult ptr null, %call
br i1 %cmp3.i1172.i, label %wunpsect.exit.thread.loopexit389, label %inner_loop_body

inner_loop_body: ; preds = %shared_loop_header
%3 = icmp slt i32 undef, 0
br i1 %3, label %if.end96.i, label %shared_loop_header

dead_block: ; preds = %inner_loop_body
%cmp75.i = icmp ult i8* %dst.0.i, null
%cmp75.i = icmp ult ptr %dst.0.i, null
br label %shared_loop_header

if.end96.i: ; preds = %inner_loop_body
%cmp97.i = icmp ugt i32 %0, 2
br i1 %cmp97.i, label %if.then99.i, label %if.end287.i

if.then99.i: ; preds = %if.end96.i
tail call void (i8*, ...) @cli_dbgmsg(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.6, i64 0, i64 0), i32 undef)
tail call void (ptr, ...) @cli_dbgmsg(ptr @.str.6, i32 undef)
br label %cleanup

if.end287.i: ; preds = %if.end96.i
Expand All @@ -270,7 +270,7 @@ if.end308.i: ; preds = %if.end287.i
br i1 undef, label %if.end335.i, label %merge_predecessor_split

merge_predecessor_split: ; preds = %if.end308.i
%4 = bitcast i8* undef to i32*
%4 = bitcast ptr undef to ptr
br label %outer_loop_latch

if.end335.i: ; preds = %if.end308.i
Expand All @@ -284,8 +284,8 @@ outer_loop_latch: ; preds = %merge_other, %if.en
%backsize.0.i = phi i16 [ %conv294.i, %if.end287.i ], [ 0, %merge_other ], [ 0, %merge_predecessor_split ], [ 0, %if.end335.i ]
%5 = add i16 %backsize.0.i, -1
%6 = zext i16 %5 to i64
%scevgep.i = getelementptr i8, i8* %dst.0.ph.i, i64 1
%scevgep679.i = getelementptr i8, i8* %scevgep.i, i64 %6
%scevgep.i = getelementptr i8, ptr %dst.0.ph.i, i64 1
%scevgep679.i = getelementptr i8, ptr %scevgep.i, i64 %6
br label %outer_loop_header

wunpsect.exit.thread.loopexit389: ; preds = %shared_loop_header
Expand All @@ -300,12 +300,12 @@ cleanup: ; preds = %if.then99.i, %while
}

; Function Attrs: nounwind
declare void @cli_dbgmsg(i8*, ...) local_unnamed_addr #0
declare void @cli_dbgmsg(ptr, ...) local_unnamed_addr #0

; Function Attrs: nounwind
declare i8* @cli_calloc(i64, i64) local_unnamed_addr #0
declare ptr @cli_calloc(i64, i64) local_unnamed_addr #0

; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #1
declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #1
attributes #0 = { nounwind }
attributes #1 = { argmemonly nounwind }
30 changes: 15 additions & 15 deletions llvm/test/CodeGen/X86/tailcc-dwarf.ll
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
; RUN: llc -mtriple=x86_64-unknown-linux-gnu -O0 --frame-pointer=non-leaf %s -o - | FileCheck %s

%block = type { %blockheader, [0 x i64*] }
%block = type { %blockheader, [0 x ptr] }
%blockheader = type { i64 }

define void @scanStackRoots(i32) {
ret void
}

define i32 @main(i32 %argc, i8** %argv) {
define i32 @main(i32 %argc, ptr %argv) {
entry:
%0 = call tailcc %block* @apply_rule_6870(%block* null, %block* null)
%0 = call tailcc ptr @apply_rule_6870(ptr null, ptr null)
ret i32 0
}

define internal tailcc %block* @apply_rule_6870(%block* %0, %block* %1) {
define internal tailcc ptr @apply_rule_6870(ptr %0, ptr %1) {
entry:
%2 = tail call tailcc %block* @sender12(%block* %0, %block* %1)
ret %block* null
%2 = tail call tailcc ptr @sender12(ptr %0, ptr %1)
ret ptr null
}

define internal tailcc %block* @sender12(%block* %0, %block* %1) {
define internal tailcc ptr @sender12(ptr %0, ptr %1) {
; CHECK-LABEL: sender12:
; CHECK: .cfi_startproc
; CHECK: subq $8160, %rsp
Expand All @@ -28,20 +28,20 @@ define internal tailcc %block* @sender12(%block* %0, %block* %1) {
; CHECK: .cfi_offset %rbp, -8176
entry:
%a = alloca [1024 x i32]
%b = load [1024 x i32], [1024 x i32]* %a
%b = load [1024 x i32], ptr %a
call void @scanStackRoots(i32 1)
%2 = tail call tailcc %block* @apply_rule_6300(%block* %0, %block* %1, [1024 x i32] %b)
ret %block* %2
%2 = tail call tailcc ptr @apply_rule_6300(ptr %0, ptr %1, [1024 x i32] %b)
ret ptr %2
}

define internal tailcc %block* @apply_rule_6300(%block* %0, %block* %1, [1024 x i32] %2) {
define internal tailcc ptr @apply_rule_6300(ptr %0, ptr %1, [1024 x i32] %2) {
entry:
%3 = tail call tailcc %block* @sender4(%block* %0, %block* %1)
ret %block* %3
%3 = tail call tailcc ptr @sender4(ptr %0, ptr %1)
ret ptr %3
}

define internal tailcc %block* @sender4(%block* %0, %block* %1) {
define internal tailcc ptr @sender4(ptr %0, ptr %1) {
entry:
call void @scanStackRoots(i32 2)
ret %block* null
ret ptr null
}
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/threadlocal_address.ll
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ entry:
ret i32 %3
}

@j = thread_local addrspace(1) global i32 addrspace(0)* @i, align 4
@j = thread_local addrspace(1) global ptr addrspace(0) @i, align 4
define noundef i32 @bar() {
; CHECK: %0:gr64 = MOV64rm $rip, 1, $noreg, target-flags(x86-gottpoff) @j, $noreg :: (load (s64) from got)
; CHECK: %1:gr32 = MOV32rm %0, 1, $noreg, 0, $fs :: (load (s32) from %ir.0, addrspace 1)
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/X86/win64-byval.ll
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ define void @test() {
ret void
}

define i64 @receive_byval_arg_via_stack_arg(i64* byval(i64), i64* byval(i64), i64* byval(i64), i64* byval(i64), i64* byval(i64) %x) {
define i64 @receive_byval_arg_via_stack_arg(ptr byval(i64), ptr byval(i64), ptr byval(i64), ptr byval(i64), ptr byval(i64) %x) {
; CHECK-LABEL: receive_byval_arg_via_stack_arg:
; CHECK: # %bb.0:
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rax
; CHECK-NEXT: movq (%rax), %rax
; CHECK-NEXT: retq
%r = load i64, i64* %x
%r = load i64, ptr %x
ret i64 %r
}
108 changes: 54 additions & 54 deletions llvm/test/CodeGen/X86/windows-seh-EHa-CppCatchDotDotDot.ll
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ source_filename = "windows-seh-EHa-CppCatchDotDotDot.cpp"
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-windows-msvc"

%rtti.TypeDescriptor2 = type { i8**, i8*, [3 x i8] }
%rtti.TypeDescriptor2 = type { ptr, ptr, [3 x i8] }
%eh.CatchableType = type { i32, i32, i32, i32, i32, i32, i32 }
%eh.CatchableTypeArray.1 = type { i32, [1 x i32] }
%eh.ThrowInfo = type { i32, i32, i32, i32 }
Expand All @@ -68,85 +68,85 @@ $"??_C@_0N@LJHFFAKD@?5in?5A?5ctor?5?6?$AA@" = comdat any

$"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@" = comdat any

@"?pt1@@3PEAHEA" = dso_local global i32* null, align 8
@"?pt2@@3PEAHEA" = dso_local global i32* null, align 8
@"?pt3@@3PEAHEA" = dso_local global i32* null, align 8
@"?pt1@@3PEAHEA" = dso_local global ptr null, align 8
@"?pt2@@3PEAHEA" = dso_local global ptr null, align 8
@"?pt3@@3PEAHEA" = dso_local global ptr null, align 8
@"?g@@3HA" = dso_local global i32 0, align 4
@"??_C@_0BJ@EIKFKKLB@?5in?5catch?$CI?4?4?4?$CJ?5funclet?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [25 x i8] c" in catch(...) funclet \0A\00", comdat, align 1
@"??_7type_info@@6B@" = external constant i8*
@"??_R0H@8" = linkonce_odr global %rtti.TypeDescriptor2 { i8** @"??_7type_info@@6B@", i8* null, [3 x i8] c".H\00" }, comdat
@"??_7type_info@@6B@" = external constant ptr
@"??_R0H@8" = linkonce_odr global %rtti.TypeDescriptor2 { ptr @"??_7type_info@@6B@", ptr null, [3 x i8] c".H\00" }, comdat
@__ImageBase = external dso_local constant i8
@"_CT??_R0H@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 1, i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%rtti.TypeDescriptor2* @"??_R0H@8" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32), i32 0, i32 -1, i32 0, i32 4, i32 0 }, section ".xdata", comdat
@_CTA1H = linkonce_odr unnamed_addr constant %eh.CatchableTypeArray.1 { i32 1, [1 x i32] [i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%eh.CatchableType* @"_CT??_R0H@84" to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32)] }, section ".xdata", comdat
@_TI1H = linkonce_odr unnamed_addr constant %eh.ThrowInfo { i32 0, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint (%eh.CatchableTypeArray.1* @_CTA1H to i64), i64 ptrtoint (i8* @__ImageBase to i64)) to i32) }, section ".xdata", comdat
@"_CT??_R0H@84" = linkonce_odr unnamed_addr constant %eh.CatchableType { i32 1, i32 trunc (i64 sub nuw nsw (i64 ptrtoint (ptr @"??_R0H@8" to i64), i64 ptrtoint (ptr @__ImageBase to i64)) to i32), i32 0, i32 -1, i32 0, i32 4, i32 0 }, section ".xdata", comdat
@_CTA1H = linkonce_odr unnamed_addr constant %eh.CatchableTypeArray.1 { i32 1, [1 x i32] [i32 trunc (i64 sub nuw nsw (i64 ptrtoint (ptr @"_CT??_R0H@84" to i64), i64 ptrtoint (ptr @__ImageBase to i64)) to i32)] }, section ".xdata", comdat
@_TI1H = linkonce_odr unnamed_addr constant %eh.ThrowInfo { i32 0, i32 0, i32 0, i32 trunc (i64 sub nuw nsw (i64 ptrtoint (ptr @_CTA1H to i64), i64 ptrtoint (ptr @__ImageBase to i64)) to i32) }, section ".xdata", comdat
@"??_C@_0CN@MKCAOFNA@?5Test?5CPP?5unwind?3?5in?5except?5hand@" = linkonce_odr dso_local unnamed_addr constant [45 x i8] c" Test CPP unwind: in except handler i = %d \0A\00", comdat, align 1
@"??_C@_0N@LJHFFAKD@?5in?5A?5ctor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c" in A ctor \0A\00", comdat, align 1
@"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c" in A dtor \0A\00", comdat, align 1

; Function Attrs: noinline nounwind optnone
define dso_local void @"?foo@@YAXXZ"() #0 {
entry:
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
ret void
}

; Function Attrs: noinline optnone
define dso_local void @"?crash@@YAXH@Z"(i32 %i) #1 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
define dso_local void @"?crash@@YAXH@Z"(i32 %i) #1 personality ptr @__CxxFrameHandler3 {
entry:
%i.addr = alloca i32, align 4
%ObjA = alloca %struct.A, align 1
%tmp = alloca i32, align 4
store i32 %i, i32* %i.addr, align 4
%0 = load i32, i32* %i.addr, align 4
store i32 %0, i32* @"?g@@3HA", align 4
store i32 %i, ptr %i.addr, align 4
%0 = load i32, ptr %i.addr, align 4
store i32 %0, ptr @"?g@@3HA", align 4
invoke void @llvm.seh.try.begin()
to label %invoke.cont unwind label %catch.dispatch

invoke.cont: ; preds = %entry
%call = invoke %struct.A* @"??0A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %ObjA)
%call = invoke ptr @"??0A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA)
to label %invoke.cont1 unwind label %catch.dispatch

invoke.cont1: ; preds = %invoke.cont
invoke void @llvm.seh.scope.begin()
to label %invoke.cont2 unwind label %ehcleanup

invoke.cont2: ; preds = %invoke.cont1
%1 = load i32, i32* %i.addr, align 4
%1 = load i32, ptr %i.addr, align 4
%cmp = icmp eq i32 %1, 1
br i1 %cmp, label %if.then, label %if.end

if.then: ; preds = %invoke.cont2
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end

if.end: ; preds = %if.then, %invoke.cont2
invoke void @llvm.seh.scope.end()
to label %invoke.cont3 unwind label %ehcleanup

invoke.cont3: ; preds = %if.end
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %ObjA) #6
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA) #6
br label %try.cont

ehcleanup: ; preds = %if.end, %invoke.cont1
%2 = cleanuppad within none []
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %ObjA) #6 [ "funclet"(token %2) ]
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA) #6 [ "funclet"(token %2) ]
cleanupret from %2 unwind label %catch.dispatch

catch.dispatch: ; preds = %ehcleanup, %invoke.cont, %entry
%3 = catchswitch within none [label %catch] unwind to caller

catch: ; preds = %catch.dispatch
%4 = catchpad within %3 [i8* null, i32 0, i8* null]
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @"??_C@_0BJ@EIKFKKLB@?5in?5catch?$CI?4?4?4?$CJ?5funclet?5?6?$AA@", i64 0, i64 0)) [ "funclet"(token %4) ]
%5 = load i32, i32* %i.addr, align 4
%4 = catchpad within %3 [ptr null, i32 0, ptr null]
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0BJ@EIKFKKLB@?5in?5catch?$CI?4?4?4?$CJ?5funclet?5?6?$AA@") [ "funclet"(token %4) ]
%5 = load i32, ptr %i.addr, align 4
%cmp4 = icmp eq i32 %5, 1
br i1 %cmp4, label %if.then5, label %if.end6

if.then5: ; preds = %catch
%6 = load i32, i32* %i.addr, align 4
store i32 %6, i32* %tmp, align 4
%7 = bitcast i32* %tmp to i8*
call void @_CxxThrowException(i8* %7, %eh.ThrowInfo* @_TI1H) #7 [ "funclet"(token %4) ]
%6 = load i32, ptr %i.addr, align 4
store i32 %6, ptr %tmp, align 4
%7 = bitcast ptr %tmp to ptr
call void @_CxxThrowException(ptr %7, ptr @_TI1H) #7 [ "funclet"(token %4) ]
unreachable

if.end6: ; preds = %catch
Expand All @@ -165,25 +165,25 @@ declare dso_local void @llvm.seh.try.begin() #2
declare dso_local i32 @__CxxFrameHandler3(...)

; Function Attrs: noinline optnone
define internal %struct.A* @"??0A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* returned %this) unnamed_addr #1 align 2 {
define internal ptr @"??0A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr returned %this) unnamed_addr #1 align 2 {
entry:
%retval = alloca %struct.A*, align 8
%this.addr = alloca %struct.A*, align 8
store %struct.A* %this, %struct.A** %this.addr, align 8
%this1 = load %struct.A*, %struct.A** %this.addr, align 8
store %struct.A* %this1, %struct.A** %retval, align 8
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @"??_C@_0N@LJHFFAKD@?5in?5A?5ctor?5?6?$AA@", i64 0, i64 0))
%0 = load i32, i32* @"?g@@3HA", align 4
%retval = alloca ptr, align 8
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
%this1 = load ptr, ptr %this.addr, align 8
store ptr %this1, ptr %retval, align 8
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@LJHFFAKD@?5in?5A?5ctor?5?6?$AA@")
%0 = load i32, ptr @"?g@@3HA", align 4
%cmp = icmp eq i32 %0, 0
br i1 %cmp, label %if.then, label %if.end

if.then: ; preds = %entry
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end

if.end: ; preds = %if.then, %entry
%1 = load %struct.A*, %struct.A** %retval, align 8
ret %struct.A* %1
%1 = load ptr, ptr %retval, align 8
ret ptr %1
}

; Function Attrs: nounwind readnone
Expand All @@ -193,31 +193,31 @@ declare dso_local void @llvm.seh.scope.begin() #3
declare dso_local void @llvm.seh.scope.end() #3

; Function Attrs: noinline nounwind optnone
define internal void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %this) unnamed_addr #0 align 2 {
define internal void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #0 align 2 {
entry:
%this.addr = alloca %struct.A*, align 8
store %struct.A* %this, %struct.A** %this.addr, align 8
%this1 = load %struct.A*, %struct.A** %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@", i64 0, i64 0))
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
%this1 = load ptr, ptr %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@")
ret void
}

declare dso_local void @"?printf@@YAXZZ"(...) #4

declare dso_local void @_CxxThrowException(i8*, %eh.ThrowInfo*)
declare dso_local void @_CxxThrowException(ptr, ptr)

; Function Attrs: noinline norecurse optnone
define dso_local i32 @main() #5 personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) {
define dso_local i32 @main() #5 personality ptr @__C_specific_handler {
entry:
%retval = alloca i32, align 4
%i = alloca i32, align 4
%__exception_code = alloca i32, align 4
store i32 0, i32* %retval, align 4
store i32 0, i32* %i, align 4
store i32 0, ptr %retval, align 4
store i32 0, ptr %i, align 4
br label %for.cond

for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%0 = load i32, ptr %i, align 4
%cmp = icmp slt i32 %0, 2
br i1 %cmp, label %for.body, label %for.end

Expand All @@ -226,7 +226,7 @@ for.body: ; preds = %for.cond
to label %invoke.cont unwind label %catch.dispatch

invoke.cont: ; preds = %for.body
%1 = load volatile i32, i32* %i, align 4
%1 = load volatile i32, ptr %i, align 4
invoke void @"?crash@@YAXH@Z"(i32 %1) #8
to label %invoke.cont1 unwind label %catch.dispatch

Expand All @@ -238,23 +238,23 @@ catch.dispatch: ; preds = %invoke.cont1, %invo
%2 = catchswitch within none [label %__except] unwind to caller

__except: ; preds = %catch.dispatch
%3 = catchpad within %2 [i8* null]
%3 = catchpad within %2 [ptr null]
catchret from %3 to label %__except3

__except3: ; preds = %__except
%4 = call i32 @llvm.eh.exceptioncode(token %3)
store i32 %4, i32* %__exception_code, align 4
%5 = load i32, i32* %i, align 4
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @"??_C@_0CN@MKCAOFNA@?5Test?5CPP?5unwind?3?5in?5except?5hand@", i64 0, i64 0), i32 %5)
store i32 %4, ptr %__exception_code, align 4
%5 = load i32, ptr %i, align 4
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0CN@MKCAOFNA@?5Test?5CPP?5unwind?3?5in?5except?5hand@", i32 %5)
br label %__try.cont

__try.cont: ; preds = %__except3, %invoke.cont2
br label %for.inc

for.inc: ; preds = %__try.cont
%6 = load i32, i32* %i, align 4
%6 = load i32, ptr %i, align 4
%inc = add nsw i32 %6, 1
store i32 %inc, i32* %i, align 4
store i32 %inc, ptr %i, align 4
br label %for.cond

invoke.cont2: ; preds = %invoke.cont1
Expand Down
298 changes: 149 additions & 149 deletions llvm/test/CodeGen/X86/windows-seh-EHa-CppCondiTemps.ll

Large diffs are not rendered by default.

80 changes: 40 additions & 40 deletions llvm/test/CodeGen/X86/windows-seh-EHa-CppDtors01.ll
Original file line number Diff line number Diff line change
Expand Up @@ -52,82 +52,82 @@ $"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@" = comdat any
@"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c" in A dtor \0A\00", comdat, align 1

; Function Attrs: noinline optnone
define dso_local void @"?crash@@YAXH@Z"(i32 %i) #0 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
define dso_local void @"?crash@@YAXH@Z"(i32 %i) #0 personality ptr @__CxxFrameHandler3 {
entry:
%i.addr = alloca i32, align 4
%ObjA = alloca %struct.A, align 1
%ObjB = alloca %struct.B, align 1
%ObjC = alloca %struct.C, align 1
store i32 %i, i32* %i.addr, align 4
store i32 %i, ptr %i.addr, align 4
invoke void @llvm.seh.scope.begin()
to label %invoke.cont unwind label %ehcleanup13

invoke.cont: ; preds = %entry
%0 = load i32, i32* %i.addr, align 4
%0 = load i32, ptr %i.addr, align 4
%cmp = icmp eq i32 %0, 0
br i1 %cmp, label %if.then, label %if.end

if.then: ; preds = %invoke.cont
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end

if.end: ; preds = %if.then, %invoke.cont
invoke void @llvm.seh.scope.begin()
to label %invoke.cont1 unwind label %ehcleanup11

invoke.cont1: ; preds = %if.end
%1 = load i32, i32* %i.addr, align 4
%1 = load i32, ptr %i.addr, align 4
%cmp2 = icmp eq i32 %1, 1
br i1 %cmp2, label %if.then3, label %if.end4

if.then3: ; preds = %invoke.cont1
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end4

if.end4: ; preds = %if.then3, %invoke.cont1
invoke void @llvm.seh.scope.begin()
to label %invoke.cont5 unwind label %ehcleanup

invoke.cont5: ; preds = %if.end4
%2 = load i32, i32* %i.addr, align 4
%2 = load i32, ptr %i.addr, align 4
%cmp6 = icmp eq i32 %2, 2
br i1 %cmp6, label %if.then7, label %if.end8

if.then7: ; preds = %invoke.cont5
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end8

if.end8: ; preds = %if.then7, %invoke.cont5
invoke void @llvm.seh.scope.end()
to label %invoke.cont9 unwind label %ehcleanup

invoke.cont9: ; preds = %if.end8
call void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.C* %ObjC) #6
call void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjC) #6
invoke void @llvm.seh.scope.end()
to label %invoke.cont10 unwind label %ehcleanup11

invoke.cont10: ; preds = %invoke.cont9
call void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.B* %ObjB) #6
call void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjB) #6
invoke void @llvm.seh.scope.end()
to label %invoke.cont12 unwind label %ehcleanup13

invoke.cont12: ; preds = %invoke.cont10
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %ObjA) #6
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA) #6
ret void

ehcleanup: ; preds = %if.end8, %if.end4
%3 = cleanuppad within none []
call void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.C* %ObjC) #6 [ "funclet"(token %3) ]
call void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjC) #6 [ "funclet"(token %3) ]
cleanupret from %3 unwind label %ehcleanup11

ehcleanup11: ; preds = %invoke.cont9, %ehcleanup, %if.end
%4 = cleanuppad within none []
call void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.B* %ObjB) #6 [ "funclet"(token %4) ]
call void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjB) #6 [ "funclet"(token %4) ]
cleanupret from %4 unwind label %ehcleanup13

ehcleanup13: ; preds = %invoke.cont10, %ehcleanup11, %entry
%5 = cleanuppad within none []
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %ObjA) #6 [ "funclet"(token %5) ]
call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA) #6 [ "funclet"(token %5) ]
cleanupret from %5 unwind to caller
}

Expand All @@ -140,47 +140,47 @@ declare dso_local i32 @__CxxFrameHandler3(...)
declare dso_local void @llvm.seh.scope.end() #1

; Function Attrs: noinline nounwind optnone
define internal void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.C* %this) unnamed_addr #2 align 2 {
define internal void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #2 align 2 {
entry:
%this.addr = alloca %struct.C*, align 8
store %struct.C* %this, %struct.C** %this.addr, align 8
%this1 = load %struct.C*, %struct.C** %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @"??_C@_0N@FCCEEGKL@?5in?5C?5dtor?5?6?$AA@", i64 0, i64 0))
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
%this1 = load ptr, ptr %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@FCCEEGKL@?5in?5C?5dtor?5?6?$AA@")
ret void
}

; Function Attrs: noinline nounwind optnone
define internal void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.B* %this) unnamed_addr #2 align 2 {
define internal void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #2 align 2 {
entry:
%this.addr = alloca %struct.B*, align 8
store %struct.B* %this, %struct.B** %this.addr, align 8
%this1 = load %struct.B*, %struct.B** %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @"??_C@_0N@EFFPFCOI@?5in?5B?5dtor?5?6?$AA@", i64 0, i64 0))
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
%this1 = load ptr, ptr %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@EFFPFCOI@?5in?5B?5dtor?5?6?$AA@")
ret void
}

; Function Attrs: noinline nounwind optnone
define internal void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(%struct.A* %this) unnamed_addr #2 align 2 {
define internal void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #2 align 2 {
entry:
%this.addr = alloca %struct.A*, align 8
store %struct.A* %this, %struct.A** %this.addr, align 8
%this1 = load %struct.A*, %struct.A** %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@", i64 0, i64 0))
%this.addr = alloca ptr, align 8
store ptr %this, ptr %this.addr, align 8
%this1 = load ptr, ptr %this.addr, align 8
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@")
ret void
}

; Function Attrs: noinline norecurse optnone
define dso_local i32 @main() #3 personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) {
define dso_local i32 @main() #3 personality ptr @__C_specific_handler {
entry:
%retval = alloca i32, align 4
%i = alloca i32, align 4
%__exception_code = alloca i32, align 4
store i32 0, i32* %retval, align 4
store i32 0, i32* %i, align 4
store i32 0, ptr %retval, align 4
store i32 0, ptr %i, align 4
br label %for.cond

for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%0 = load i32, ptr %i, align 4
%cmp = icmp slt i32 %0, 3
br i1 %cmp, label %for.body, label %for.end

Expand All @@ -189,7 +189,7 @@ for.body: ; preds = %for.cond
to label %invoke.cont unwind label %catch.dispatch

invoke.cont: ; preds = %for.body
%1 = load volatile i32, i32* %i, align 4
%1 = load volatile i32, ptr %i, align 4
invoke void @"?crash@@YAXH@Z"(i32 %1) #7
to label %invoke.cont1 unwind label %catch.dispatch

Expand All @@ -201,23 +201,23 @@ catch.dispatch: ; preds = %invoke.cont1, %invo
%2 = catchswitch within none [label %__except] unwind to caller

__except: ; preds = %catch.dispatch
%3 = catchpad within %2 [i8* null]
%3 = catchpad within %2 [ptr null]
catchret from %3 to label %__except3

__except3: ; preds = %__except
%4 = call i32 @llvm.eh.exceptioncode(token %3)
store i32 %4, i32* %__exception_code, align 4
%5 = load i32, i32* %i, align 4
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @"??_C@_0CM@KAOHJHDK@?5Test?5CPP?5unwind?3?5in?5catch?5handl@", i64 0, i64 0), i32 %5)
store i32 %4, ptr %__exception_code, align 4
%5 = load i32, ptr %i, align 4
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0CM@KAOHJHDK@?5Test?5CPP?5unwind?3?5in?5catch?5handl@", i32 %5)
br label %__try.cont

__try.cont: ; preds = %__except3, %invoke.cont2
br label %for.inc

for.inc: ; preds = %__try.cont
%6 = load i32, i32* %i, align 4
%6 = load i32, ptr %i, align 4
%inc = add nsw i32 %6, 1
store i32 %inc, i32* %i, align 4
store i32 %inc, ptr %i, align 4
br label %for.cond

invoke.cont2: ; preds = %invoke.cont1
Expand Down
90 changes: 45 additions & 45 deletions llvm/test/CodeGen/X86/windows-seh-EHa-TryInFinally.ll
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,24 @@ $"??_C@_0CG@ENDJHCGA@?5?9?9?9?5In?5outer?5except?5handler?5i?5?$DN@" = comdat an
@"??_C@_0CG@ENDJHCGA@?5?9?9?9?5In?5outer?5except?5handler?5i?5?$DN@" = linkonce_odr dso_local unnamed_addr constant [38 x i8] c" --- In outer except handler i = %d \0A\00", comdat, align 1

; Function Attrs: noinline norecurse optnone
define dso_local i32 @main() #0 personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) {
define dso_local i32 @main() #0 personality ptr @__C_specific_handler {
entry:
%retval = alloca i32, align 4
%i = alloca i32, align 4
%__exception_code = alloca i32, align 4
call void (...) @llvm.localescape(i32* %i)
store i32 0, i32* %retval, align 4
store i32 0, i32* %i, align 4
call void (...) @llvm.localescape(ptr %i)
store i32 0, ptr %retval, align 4
store i32 0, ptr %i, align 4
br label %for.cond

for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%0 = load i32, ptr %i, align 4
%cmp = icmp slt i32 %0, 3
br i1 %cmp, label %for.body, label %for.end

for.body: ; preds = %for.cond
%1 = load i32, i32* %i, align 4
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @"??_C@_0CI@MDFPIOJJ@?5?9?9?9?5Test?5_Try?5in?5_finally?5?9?9?9?5i@", i64 0, i64 0), i32 %1)
%1 = load i32, ptr %i, align 4
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0CI@MDFPIOJJ@?5?9?9?9?5Test?5_Try?5in?5_finally?5?9?9?9?5i@", i32 %1)
invoke void @llvm.seh.try.begin()
to label %invoke.cont unwind label %catch.dispatch

Expand All @@ -59,26 +59,26 @@ invoke.cont: ; preds = %for.body
to label %invoke.cont1 unwind label %ehcleanup

invoke.cont1: ; preds = %invoke.cont
%2 = load volatile i32, i32* %i, align 4
invoke void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @"??_C@_0BJ@OJMMAGCD@?5?5In?5outer?5_try?5i?5?$DN?5?$CFd?5?6?$AA@", i64 0, i64 0), i32 %2) #6
%2 = load volatile i32, ptr %i, align 4
invoke void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0BJ@OJMMAGCD@?5?5In?5outer?5_try?5i?5?$DN?5?$CFd?5?6?$AA@", i32 %2) #6
to label %invoke.cont2 unwind label %ehcleanup

invoke.cont2: ; preds = %invoke.cont1
%3 = load volatile i32, i32* %i, align 4
%3 = load volatile i32, ptr %i, align 4
%cmp3 = icmp eq i32 %3, 0
br i1 %cmp3, label %if.then, label %if.end

if.then: ; preds = %invoke.cont2
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end

if.end: ; preds = %if.then, %invoke.cont2
invoke void @llvm.seh.try.end()
to label %invoke.cont4 unwind label %ehcleanup

invoke.cont4: ; preds = %if.end
%4 = call i8* @llvm.localaddress()
invoke void @"?fin$0@0@main@@"(i8 0, i8* %4) #6
%4 = call ptr @llvm.localaddress()
invoke void @"?fin$0@0@main@@"(i8 0, ptr %4) #6
to label %invoke.cont5 unwind label %catch.dispatch

invoke.cont5: ; preds = %invoke.cont4
Expand All @@ -89,32 +89,32 @@ catch.dispatch: ; preds = %invoke.cont5, %invo
%5 = catchswitch within none [label %__except] unwind to caller

__except: ; preds = %catch.dispatch
%6 = catchpad within %5 [i8* null]
%6 = catchpad within %5 [ptr null]
catchret from %6 to label %__except8

__except8: ; preds = %__except
%7 = call i32 @llvm.eh.exceptioncode(token %6)
store i32 %7, i32* %__exception_code, align 4
%8 = load i32, i32* %i, align 4
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @"??_C@_0CG@ENDJHCGA@?5?9?9?9?5In?5outer?5except?5handler?5i?5?$DN@", i64 0, i64 0), i32 %8)
store i32 %7, ptr %__exception_code, align 4
%8 = load i32, ptr %i, align 4
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0CG@ENDJHCGA@?5?9?9?9?5In?5outer?5except?5handler?5i?5?$DN@", i32 %8)
br label %__try.cont

__try.cont: ; preds = %__except8, %invoke.cont7
br label %for.inc

for.inc: ; preds = %__try.cont
%9 = load i32, i32* %i, align 4
%9 = load i32, ptr %i, align 4
%inc = add nsw i32 %9, 1
store i32 %inc, i32* %i, align 4
store i32 %inc, ptr %i, align 4
br label %for.cond

invoke.cont7: ; preds = %invoke.cont5
br label %__try.cont

ehcleanup: ; preds = %if.end, %invoke.cont1, %invoke.cont
%10 = cleanuppad within none []
%11 = call i8* @llvm.localaddress()
invoke void @"?fin$0@0@main@@"(i8 1, i8* %11) #6 [ "funclet"(token %10) ]
%11 = call ptr @llvm.localaddress()
invoke void @"?fin$0@0@main@@"(i8 1, ptr %11) #6 [ "funclet"(token %10) ]
to label %invoke.cont6 unwind label %catch.dispatch

invoke.cont6: ; preds = %ehcleanup
Expand All @@ -132,65 +132,65 @@ declare dso_local void @llvm.seh.try.begin() #2
declare dso_local i32 @__C_specific_handler(...)

; Function Attrs: noinline
define internal void @"?fin$0@0@main@@"(i8 %abnormal_termination, i8* %frame_pointer) #3 personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) {
define internal void @"?fin$0@0@main@@"(i8 %abnormal_termination, ptr %frame_pointer) #3 personality ptr @__C_specific_handler {
entry:
%frame_pointer.addr = alloca i8*, align 8
%frame_pointer.addr = alloca ptr, align 8
%abnormal_termination.addr = alloca i8, align 1
%0 = call i8* @llvm.localrecover(i8* bitcast (i32 ()* @main to i8*), i8* %frame_pointer, i32 0)
%i = bitcast i8* %0 to i32*
store i8* %frame_pointer, i8** %frame_pointer.addr, align 8
store i8 %abnormal_termination, i8* %abnormal_termination.addr, align 1
%0 = call ptr @llvm.localrecover(ptr @main, ptr %frame_pointer, i32 0)
%i = bitcast ptr %0 to ptr
store ptr %frame_pointer, ptr %frame_pointer.addr, align 8
store i8 %abnormal_termination, ptr %abnormal_termination.addr, align 1
invoke void @llvm.seh.try.begin()
to label %invoke.cont unwind label %ehcleanup

invoke.cont: ; preds = %entry
%1 = load volatile i32, i32* %i, align 4
invoke void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @"??_C@_0BN@HAIIIOKI@?5?5In?5outer?5_finally?5i?5?$DN?5?$CFd?5?6?$AA@", i64 0, i64 0), i32 %1) #6
%1 = load volatile i32, ptr %i, align 4
invoke void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0BN@HAIIIOKI@?5?5In?5outer?5_finally?5i?5?$DN?5?$CFd?5?6?$AA@", i32 %1) #6
to label %invoke.cont1 unwind label %ehcleanup

invoke.cont1: ; preds = %invoke.cont
%2 = load volatile i32, i32* %i, align 4
%2 = load volatile i32, ptr %i, align 4
%cmp = icmp eq i32 %2, 1
br i1 %cmp, label %if.then, label %if.end

if.then: ; preds = %invoke.cont1
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end

if.end: ; preds = %if.then, %invoke.cont1
invoke void @llvm.seh.try.end()
to label %invoke.cont2 unwind label %ehcleanup

invoke.cont2: ; preds = %if.end
call void @"?fin$1@0@main@@"(i8 0, i8* %frame_pointer)
call void @"?fin$1@0@main@@"(i8 0, ptr %frame_pointer)
ret void

ehcleanup: ; preds = %if.end, %invoke.cont, %entry
%3 = cleanuppad within none []
call void @"?fin$1@0@main@@"(i8 1, i8* %frame_pointer) [ "funclet"(token %3) ]
call void @"?fin$1@0@main@@"(i8 1, ptr %frame_pointer) [ "funclet"(token %3) ]
cleanupret from %3 unwind to caller
}

; Function Attrs: nounwind readnone
declare i8* @llvm.localrecover(i8*, i8*, i32 immarg) #4
declare ptr @llvm.localrecover(ptr, ptr, i32 immarg) #4

; Function Attrs: noinline
define internal void @"?fin$1@0@main@@"(i8 %abnormal_termination, i8* %frame_pointer) #3 {
define internal void @"?fin$1@0@main@@"(i8 %abnormal_termination, ptr %frame_pointer) #3 {
entry:
%frame_pointer.addr = alloca i8*, align 8
%frame_pointer.addr = alloca ptr, align 8
%abnormal_termination.addr = alloca i8, align 1
%0 = call i8* @llvm.localrecover(i8* bitcast (i32 ()* @main to i8*), i8* %frame_pointer, i32 0)
%i = bitcast i8* %0 to i32*
store i8* %frame_pointer, i8** %frame_pointer.addr, align 8
store i8 %abnormal_termination, i8* %abnormal_termination.addr, align 1
%1 = load i32, i32* %i, align 4
call void (...) @"?printf@@YAXZZ"(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @"??_C@_0BN@HHKJHLBE@?5?5In?5Inner?5_finally?5i?5?$DN?5?$CFd?5?6?$AA@", i64 0, i64 0), i32 %1)
%2 = load i32, i32* %i, align 4
%0 = call ptr @llvm.localrecover(ptr @main, ptr %frame_pointer, i32 0)
%i = bitcast ptr %0 to ptr
store ptr %frame_pointer, ptr %frame_pointer.addr, align 8
store i8 %abnormal_termination, ptr %abnormal_termination.addr, align 1
%1 = load i32, ptr %i, align 4
call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0BN@HHKJHLBE@?5?5In?5Inner?5_finally?5i?5?$DN?5?$CFd?5?6?$AA@", i32 %1)
%2 = load i32, ptr %i, align 4
%cmp = icmp eq i32 %2, 2
br i1 %cmp, label %if.then, label %if.end

if.then: ; preds = %entry
store volatile i32 0, i32* inttoptr (i64 17 to i32*), align 4
store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 4
br label %if.end

if.end: ; preds = %if.then, %entry
Expand All @@ -201,7 +201,7 @@ if.end: ; preds = %if.then, %entry
declare dso_local void @llvm.seh.try.end() #2

; Function Attrs: nounwind readnone
declare i8* @llvm.localaddress() #4
declare ptr @llvm.localaddress() #4

; Function Attrs: nounwind readnone
declare i32 @llvm.eh.exceptioncode(token) #4
Expand Down