comparison test/Transforms/SROA/basictest.ll @ 77:54457678186b LLVM3.6

LLVM 3.6
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Mon, 08 Sep 2014 22:06:00 +0900
parents 95c75e76d11b
children 60c9769439b8
comparison
equal deleted inserted replaced
34:e874dbf0ad9d 77:54457678186b
1 ; RUN: opt < %s -sroa -S | FileCheck %s 1 ; RUN: opt < %s -sroa -S | FileCheck %s
2 ; RUN: opt < %s -sroa -force-ssa-updater -S | FileCheck %s 2 ; RUN: opt < %s -sroa -force-ssa-updater -S | FileCheck %s
3 3
4 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n8:16:32:64" 4 target datalayout = "e-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n8:16:32:64"
5 5
6 declare void @llvm.lifetime.start(i64, i8* nocapture) 6 declare void @llvm.lifetime.start(i64, i8* nocapture)
7 declare void @llvm.lifetime.end(i64, i8* nocapture) 7 declare void @llvm.lifetime.end(i64, i8* nocapture)
8 8
9 define i32 @test0() { 9 define i32 @test0() {
402 402
403 ret void 403 ret void
404 } 404 }
405 405
406 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind 406 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
407 declare void @llvm.memcpy.p1i8.p0i8.i32(i8 addrspace(1)* nocapture, i8* nocapture, i32, i32, i1) nounwind
407 declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind 408 declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
408 declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind 409 declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
409 410
410 define i16 @test5() { 411 define i16 @test5() {
411 ; CHECK-LABEL: @test5( 412 ; CHECK-LABEL: @test5(
1148 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %cast1, i8* %cast2, i32 16, i32 8, i1 true) 1149 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %cast1, i8* %cast2, i32 16, i32 8, i1 true)
1149 ret void 1150 ret void
1150 ; CHECK: ret 1151 ; CHECK: ret
1151 } 1152 }
1152 1153
1154 define void @PR14105_as1({ [16 x i8] } addrspace(1)* %ptr) {
1155 ; Make sure this the right address space pointer is used for type check.
1156 ; CHECK-LABEL: @PR14105_as1(
1157
1158 entry:
1159 %a = alloca { [16 x i8] }, align 8
1160 ; CHECK: alloca [16 x i8], align 8
1161
1162 %gep = getelementptr inbounds { [16 x i8] } addrspace(1)* %ptr, i64 -1
1163 ; CHECK-NEXT: getelementptr inbounds { [16 x i8] } addrspace(1)* %ptr, i16 -1, i32 0, i16 0
1164
1165 %cast1 = bitcast { [16 x i8 ] } addrspace(1)* %gep to i8 addrspace(1)*
1166 %cast2 = bitcast { [16 x i8 ] }* %a to i8*
1167 call void @llvm.memcpy.p1i8.p0i8.i32(i8 addrspace(1)* %cast1, i8* %cast2, i32 16, i32 8, i1 true)
1168 ret void
1169 ; CHECK: ret
1170 }
1171
1153 define void @PR14465() { 1172 define void @PR14465() {
1154 ; Ensure that we don't crash when analyzing a alloca larger than the maximum 1173 ; Ensure that we don't crash when analyzing a alloca larger than the maximum
1155 ; integer type width (MAX_INT_BITS) supported by llvm (1048576*32 > (1<<23)-1). 1174 ; integer type width (MAX_INT_BITS) supported by llvm (1048576*32 > (1<<23)-1).
1156 ; CHECK-LABEL: @PR14465( 1175 ; CHECK-LABEL: @PR14465(
1157 1176
1312 1331
1313 %c = alloca i64, align 8 1332 %c = alloca i64, align 8
1314 %p.0.c = select i1 undef, i64* %c, i64* %c 1333 %p.0.c = select i1 undef, i64* %c, i64* %c
1315 %cond.in = select i1 undef, i64* %p.0.c, i64* %c 1334 %cond.in = select i1 undef, i64* %p.0.c, i64* %c
1316 %cond = load i64* %cond.in, align 8 1335 %cond = load i64* %cond.in, align 8
1336 ret void
1337 }
1338
1339 define void @PR15805.1(i1 %a, i1 %b) {
1340 ; Same as the normal PR15805, but rigged to place the use before the def inside
1341 ; of looping unreachable code. This helps ensure that we aren't sensitive to the
1342 ; order in which the uses of the alloca are visited.
1343 ;
1344 ; CHECK-LABEL: @PR15805.1(
1345 ; CHECK-NOT: alloca
1346 ; CHECK: ret void
1347
1348 %c = alloca i64, align 8
1349 br label %exit
1350
1351 loop:
1352 %cond.in = select i1 undef, i64* %c, i64* %p.0.c
1353 %p.0.c = select i1 undef, i64* %c, i64* %c
1354 %cond = load i64* %cond.in, align 8
1355 br i1 undef, label %loop, label %exit
1356
1357 exit:
1317 ret void 1358 ret void
1318 } 1359 }
1319 1360
1320 define void @PR16651.1(i8* %a) { 1361 define void @PR16651.1(i8* %a) {
1321 ; This test case caused a crash due to the volatile memcpy in combination with 1362 ; This test case caused a crash due to the volatile memcpy in combination with
1354 %1 = getelementptr inbounds { <2 x float>, <2 x float> }* %tv1, i64 0, i32 1, i64 0 1395 %1 = getelementptr inbounds { <2 x float>, <2 x float> }* %tv1, i64 0, i32 1, i64 0
1355 %cond105.in.i.i = select i1 undef, float* null, float* %1 1396 %cond105.in.i.i = select i1 undef, float* null, float* %1
1356 %cond105.i.i = load float* %cond105.in.i.i, align 8 1397 %cond105.i.i = load float* %cond105.in.i.i, align 8
1357 ret void 1398 ret void
1358 } 1399 }
1400
1401 define void @test23(i32 %x) {
1402 ; CHECK-LABEL: @test23(
1403 ; CHECK-NOT: alloca
1404 ; CHECK: ret void
1405 entry:
1406 %a = alloca i32, align 4
1407 store i32 %x, i32* %a, align 4
1408 %gep1 = getelementptr inbounds i32* %a, i32 1
1409 %gep0 = getelementptr inbounds i32* %a, i32 0
1410 %cast1 = bitcast i32* %gep1 to i8*
1411 %cast0 = bitcast i32* %gep0 to i8*
1412 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %cast1, i8* %cast0, i32 4, i32 1, i1 false)
1413 ret void
1414 }
1415
1416 define void @PR18615() {
1417 ; CHECK-LABEL: @PR18615(
1418 ; CHECK-NOT: alloca
1419 ; CHECK: ret void
1420 entry:
1421 %f = alloca i8
1422 %gep = getelementptr i8* %f, i64 -1
1423 call void @llvm.memcpy.p0i8.p0i8.i32(i8* undef, i8* %gep, i32 1, i32 1, i1 false)
1424 ret void
1425 }
1426
1427 define void @test24(i8* %src, i8* %dst) {
1428 ; CHECK-LABEL: @test24(
1429 ; CHECK: alloca i64, align 16
1430 ; CHECK: load volatile i64* %{{[^,]*}}, align 1
1431 ; CHECK: store volatile i64 %{{[^,]*}}, i64* %{{[^,]*}}, align 16
1432 ; CHECK: load volatile i64* %{{[^,]*}}, align 16
1433 ; CHECK: store volatile i64 %{{[^,]*}}, i64* %{{[^,]*}}, align 1
1434
1435 entry:
1436 %a = alloca i64, align 16
1437 %ptr = bitcast i64* %a to i8*
1438 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %ptr, i8* %src, i32 8, i32 1, i1 true)
1439 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %ptr, i32 8, i32 1, i1 true)
1440 ret void
1441 }
1442