1; RUN: llc -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