1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 -mattr=+htm < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @test1() { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %0 = tail call i32 @llvm.ppc.tbegin(i32 0) 8*9880d681SAndroid Build Coastguard Worker ret i32 %0 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1 11*9880d681SAndroid Build Coastguard Worker; CHECK: tbegin. 0 12*9880d681SAndroid Build Coastguard Worker; CHECK: mfocrf [[REGISTER1:[0-9]+]], 128 13*9880d681SAndroid Build Coastguard Worker; CHECK: rlwinm [[REGISTER2:[0-9]+]], [[REGISTER1]], 3, 31, 31 14*9880d681SAndroid Build Coastguard Worker; CHECK: xori {{[0-9]+}}, [[REGISTER2]], 1 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tbegin(i32) #1 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @test2() { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker %0 = tail call i32 @llvm.ppc.tend(i32 0) 23*9880d681SAndroid Build Coastguard Worker ret i32 %0 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2 25*9880d681SAndroid Build Coastguard Worker; CHECK: tend. 0 26*9880d681SAndroid Build Coastguard Worker; CHECK: mfocrf {{[0-9]+}}, 128 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tend(i32) 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine void @test3() { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %0 = tail call i32 @llvm.ppc.tabort(i32 0) 35*9880d681SAndroid Build Coastguard Worker %1 = tail call i32 @llvm.ppc.tabortdc(i32 0, i32 1, i32 2) 36*9880d681SAndroid Build Coastguard Worker %2 = tail call i32 @llvm.ppc.tabortdci(i32 0, i32 1, i32 2) 37*9880d681SAndroid Build Coastguard Worker %3 = tail call i32 @llvm.ppc.tabortwc(i32 0, i32 1, i32 2) 38*9880d681SAndroid Build Coastguard Worker %4 = tail call i32 @llvm.ppc.tabortwci(i32 0, i32 1, i32 2) 39*9880d681SAndroid Build Coastguard Worker ret void 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3 41*9880d681SAndroid Build Coastguard Worker; CHECK: tabort. {{[0-9]+}} 42*9880d681SAndroid Build Coastguard Worker; CHECK: tabortdc. 0, {{[0-9]+}}, {{[0-9]+}} 43*9880d681SAndroid Build Coastguard Worker; CHECK: tabortdci. 0, {{[0-9]+}}, 2 44*9880d681SAndroid Build Coastguard Worker; CHECK: tabortwc. 0, {{[0-9]+}}, {{[0-9]+}} 45*9880d681SAndroid Build Coastguard Worker; CHECK: tabortwci. 0, {{[0-9]+}}, 2 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tabort(i32) 49*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tabortdc(i32, i32, i32) 50*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tabortdci(i32, i32, i32) 51*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tabortwc(i32, i32, i32) 52*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tabortwci(i32, i32, i32) 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine void @test4() { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %0 = tail call i32 @llvm.ppc.tendall() 58*9880d681SAndroid Build Coastguard Worker %1 = tail call i32 @llvm.ppc.tresume() 59*9880d681SAndroid Build Coastguard Worker %2 = tail call i32 @llvm.ppc.tsuspend() 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4 62*9880d681SAndroid Build Coastguard Worker; CHECK: tend. 1 63*9880d681SAndroid Build Coastguard Worker; CHECK: tsr. 1 64*9880d681SAndroid Build Coastguard Worker; CHECK: tsr. 0 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tendall() 68*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tresume() 69*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ppc.tsuspend() 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine void @test5(i64 %v) { 73*9880d681SAndroid Build Coastguard Workerentry: 74*9880d681SAndroid Build Coastguard Worker tail call void @llvm.ppc.set.texasr(i64 %v) 75*9880d681SAndroid Build Coastguard Worker tail call void @llvm.ppc.set.texasru(i64 %v) 76*9880d681SAndroid Build Coastguard Worker tail call void @llvm.ppc.set.tfhar(i64 %v) 77*9880d681SAndroid Build Coastguard Worker tail call void @llvm.ppc.set.tfiar(i64 %v) 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5 80*9880d681SAndroid Build Coastguard Worker; CHECK: mtspr 130, [[REG1:[0-9]+]] 81*9880d681SAndroid Build Coastguard Worker; CHECK: mtspr 131, [[REG2:[0-9]+]] 82*9880d681SAndroid Build Coastguard Worker; CHECK: mtspr 128, [[REG3:[0-9]+]] 83*9880d681SAndroid Build Coastguard Worker; CHECK: mtspr 129, [[REG4:[0-9]+]] 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine i64 @test6() { 87*9880d681SAndroid Build Coastguard Workerentry: 88*9880d681SAndroid Build Coastguard Worker %0 = tail call i64 @llvm.ppc.get.texasr() 89*9880d681SAndroid Build Coastguard Worker ret i64 %0 90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6 91*9880d681SAndroid Build Coastguard Worker; CHECK: mfspr [[REG1:[0-9]+]], 130 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine i64 @test7() { 95*9880d681SAndroid Build Coastguard Workerentry: 96*9880d681SAndroid Build Coastguard Worker %0 = tail call i64 @llvm.ppc.get.texasru() 97*9880d681SAndroid Build Coastguard Worker ret i64 %0 98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7 99*9880d681SAndroid Build Coastguard Worker; CHECK: mfspr [[REG1:[0-9]+]], 131 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine i64 @test8() { 103*9880d681SAndroid Build Coastguard Workerentry: 104*9880d681SAndroid Build Coastguard Worker %0 = tail call i64 @llvm.ppc.get.tfhar() 105*9880d681SAndroid Build Coastguard Worker ret i64 %0 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8 107*9880d681SAndroid Build Coastguard Worker; CHECK: mfspr [[REG1:[0-9]+]], 128 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerdefine i64 @test9() { 111*9880d681SAndroid Build Coastguard Workerentry: 112*9880d681SAndroid Build Coastguard Worker %0 = tail call i64 @llvm.ppc.get.tfiar() 113*9880d681SAndroid Build Coastguard Worker ret i64 %0 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9 115*9880d681SAndroid Build Coastguard Worker; CHECK: mfspr [[REG1:[0-9]+]], 129 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.ppc.set.texasr(i64) 119*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.ppc.set.texasru(i64) 120*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.ppc.set.tfhar(i64) 121*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.ppc.set.tfiar(i64) 122*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.ppc.get.texasr() 123*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.ppc.get.texasru() 124*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.ppc.get.tfhar() 125*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.ppc.get.tfiar() 126