1; RUN: llc -verify-machineinstrs -mcpu=pwr7 < %s | FileCheck %s
2target datalayout = "E-m:e-i64:64-n32:64"
3target triple = "powerpc64-unknown-linux-gnu"
4
5define i64 @test1(i64 %a, i64 %b) {
6entry:
7  %c = icmp eq i64 %a, %b
8  br label %foo
9
10foo:
11  call { i64, i64 } asm sideeffect "sc", "={r0},={r3},{r0},~{cr0},~{cr1},~{cr2},~{cr3},~{cr4},~{cr5},~{cr6},~{cr7}" (i64 %a)
12  br i1 %c, label %bar, label %end
13
14bar:
15  ret i64 %b
16
17end:
18  ret i64 %a
19
20; CHECK-LABEL: @test1
21; CHECK: mfcr [[REG1:[0-9]+]]
22; CHECK-DAG: cmpd
23; CHECK-DAG: mfocrf [[REG2:[0-9]+]],
24; CHECK-DAG: stw [[REG1]], 8(1)
25; CHECK-DAG: stw [[REG2]], -4(1)
26
27; CHECK: sc
28; CHECK: lwz [[REG3:[0-9]+]], -4(1)
29; CHECK: mtocrf 128, [[REG3]]
30
31; CHECK: lwz [[REG4:[0-9]+]], 8(1)
32; CHECK-DAG: mtocrf 32, [[REG4]]
33; CHECK-DAG: mtocrf 16, [[REG4]]
34; CHECK-DAG: mtocrf 8, [[REG4]]
35; CHECK: blr
36}
37
38define i64 @test2(i64 %a, i64 %b) {
39entry:
40  %c = icmp eq i64 %a, %b
41  br label %foo
42
43foo:
44  call { i64, i64 } asm sideeffect "sc", "={r0},={r3},{r0},~{cc},~{cr1},~{cr2},~{cr3},~{cr4},~{cr5},~{cr6},~{cr7}" (i64 %a)
45  br i1 %c, label %bar, label %end
46
47bar:
48  ret i64 %b
49
50end:
51  ret i64 %a
52
53; CHECK-LABEL: @test2
54; CHECK: mfcr [[REG1:[0-9]+]]
55; CHECK-DAG: cmpd
56; CHECK-DAG: mfocrf [[REG2:[0-9]+]],
57; CHECK-DAG: stw [[REG1]], 8(1)
58; CHECK-DAG: stw [[REG2]], -4(1)
59
60; CHECK: sc
61; CHECK: lwz [[REG3:[0-9]+]], -4(1)
62; CHECK: mtocrf 128, [[REG3]]
63
64; CHECK: lwz [[REG4:[0-9]+]], 8(1)
65; CHECK-DAG: mtocrf 32, [[REG4]]
66; CHECK-DAG: mtocrf 16, [[REG4]]
67; CHECK-DAG: mtocrf 8, [[REG4]]
68; CHECK: blr
69}
70
71