Mercurial > hg > CbC > CbC_llvm
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 |