[LLVM][Alignment] Make functions using log of alignment explicit
[llvm-complete.git] / test / CodeGen / PowerPC / htm.ll
blob9b81de5463fd67a4aa72b244ec533de6d8f12598
1 ; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mattr=+htm < %s | FileCheck %s
2 target datalayout = "E-m:e-i64:64-n32:64"
3 target triple = "powerpc64-unknown-linux-gnu"
5 define zeroext i32 @test1() {
6 entry:
7   %0 = tail call i32 @llvm.ppc.tbegin(i32 0)
8   ret i32 %0
10 ; CHECK-LABEL: @test1
11 ; CHECK: tbegin. 0
12 ; CHECK: mfocrf  [[REGISTER1:[0-9]+]], 128
13 ; CHECK: rlwinm  [[REGISTER2:[0-9]+]], [[REGISTER1]], 3, 31, 31
14 ; CHECK: xori    {{[0-9]+}}, [[REGISTER2]], 1
17 declare i32 @llvm.ppc.tbegin(i32) #1
20 define zeroext i32 @test2() {
21 entry:
22   %0 = tail call i32 @llvm.ppc.tend(i32 0)
23   ret i32 %0
24 ; CHECK-LABEL: @test2
25 ; CHECK: tend. 0
26 ; CHECK: mfocrf  {{[0-9]+}}, 128
29 declare i32 @llvm.ppc.tend(i32)
32 define void @test3() {
33 entry:
34   %0 = tail call i32 @llvm.ppc.tabort(i32 0)
35   %1 = tail call i32 @llvm.ppc.tabortdc(i32 0, i32 1, i32 2)
36   %2 = tail call i32 @llvm.ppc.tabortdci(i32 0, i32 1, i32 2)
37   %3 = tail call i32 @llvm.ppc.tabortwc(i32 0, i32 1, i32 2)
38   %4 = tail call i32 @llvm.ppc.tabortwci(i32 0, i32 1, i32 2)
39   ret void
40 ; CHECK-LABEL: @test3
41 ; CHECK: tabort.    {{[0-9]+}}
42 ; CHECK: tabortdc.  0, {{[0-9]+}}, {{[0-9]+}}
43 ; CHECK: tabortdci. 0, {{[0-9]+}}, 2
44 ; CHECK: tabortwc.  0, {{[0-9]+}}, {{[0-9]+}}
45 ; CHECK: tabortwci. 0, {{[0-9]+}}, 2
48 declare i32 @llvm.ppc.tabort(i32)
49 declare i32 @llvm.ppc.tabortdc(i32, i32, i32)
50 declare i32 @llvm.ppc.tabortdci(i32, i32, i32)
51 declare i32 @llvm.ppc.tabortwc(i32, i32, i32)
52 declare i32 @llvm.ppc.tabortwci(i32, i32, i32)
55 define void @test4() {
56 entry:
57   %0 = tail call i32 @llvm.ppc.tendall()
58   %1 = tail call i32 @llvm.ppc.tresume()
59   %2 = tail call i32 @llvm.ppc.tsuspend()
60   %3 = tail call i64 @llvm.ppc.ttest()
61   ret void
62 ; CHECK-LABEL: @test4
63 ; CHECK: tend. 1
64 ; CHECK: tsr.  1
65 ; CHECK: tsr.  0
66 ; CHECK: tabortwci. 0, {{[0-9]+}}, 0
69 declare i32 @llvm.ppc.tendall()
70 declare i32 @llvm.ppc.tresume()
71 declare i32 @llvm.ppc.tsuspend()
72 declare i64 @llvm.ppc.ttest()
75 define void @test5(i64 %v) {
76 entry:
77   tail call void @llvm.ppc.set.texasr(i64 %v)
78   tail call void @llvm.ppc.set.texasru(i64 %v)
79   tail call void @llvm.ppc.set.tfhar(i64 %v)
80   tail call void @llvm.ppc.set.tfiar(i64 %v)
81   ret void
82 ; CHECK-LABEL: @test5
83 ; CHECK: mtspr 130, [[REG1:[0-9]+]]
84 ; CHECK: mtspr 131, [[REG2:[0-9]+]]
85 ; CHECK: mtspr 128, [[REG3:[0-9]+]]
86 ; CHECK: mtspr 129, [[REG4:[0-9]+]]
89 define i64 @test6() {
90 entry:
91   %0 = tail call i64 @llvm.ppc.get.texasr()
92   ret i64 %0
93 ; CHECK-LABEL: @test6
94 ; CHECK: mfspr [[REG1:[0-9]+]], 130
97 define i64 @test7() {
98 entry:
99   %0 = tail call i64 @llvm.ppc.get.texasru()
100   ret i64 %0
101 ; CHECK-LABEL: @test7
102 ; CHECK: mfspr [[REG1:[0-9]+]], 131
105 define i64 @test8() {
106 entry:
107   %0 = tail call i64 @llvm.ppc.get.tfhar()
108   ret i64 %0
109 ; CHECK-LABEL: @test8
110 ; CHECK: mfspr [[REG1:[0-9]+]], 128
113 define i64 @test9() {
114 entry:
115   %0 = tail call i64 @llvm.ppc.get.tfiar()
116   ret i64 %0
117 ; CHECK-LABEL: @test9
118 ; CHECK: mfspr [[REG1:[0-9]+]], 129
121 declare void @llvm.ppc.set.texasr(i64)
122 declare void @llvm.ppc.set.texasru(i64)
123 declare void @llvm.ppc.set.tfhar(i64)
124 declare void @llvm.ppc.set.tfiar(i64)
125 declare i64 @llvm.ppc.get.texasr()
126 declare i64 @llvm.ppc.get.texasru()
127 declare i64 @llvm.ppc.get.tfhar()
128 declare i64 @llvm.ppc.get.tfiar()
130 define void @test10() {
131 entry:
132   %0 = tail call i32 @llvm.ppc.tcheck()
133   %1 = tail call i32 @llvm.ppc.treclaim(i32 5)
134   %2 = tail call i32 @llvm.ppc.trechkpt()
135   %3 = tail call i32 @llvm.ppc.tsr(i32 1)
136   ret void
137 ; CHECK-LABEL: @test10
138 ; CHECK: tcheck [[REG1:[0-9]+]] 
139 ; CHECK: treclaim. [[REG2:[0-9]+]] 
140 ; CHECK: trechkpt. 
141 ; CHECK: tsr.  1
144 declare i32 @llvm.ppc.tcheck()
145 declare i32 @llvm.ppc.treclaim(i32)
146 declare i32 @llvm.ppc.trechkpt()
147 declare i32 @llvm.ppc.tsr(i32)