| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -mtriple=ppc64le-unknown-linux-gnu < %s | FileCheck %s |
| |
| ; Make sure the loads happen after each call, not after both calls. |
| define i1 @test() nounwind { |
| ; CHECK-LABEL: test: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: mflr 0 |
| ; CHECK-NEXT: stdu 1, -96(1) |
| ; CHECK-NEXT: std 0, 112(1) |
| ; CHECK-NEXT: std 30, 80(1) # 8-byte Folded Spill |
| ; CHECK-NEXT: li 3, 64 |
| ; CHECK-NEXT: addi 30, 1, 48 |
| ; CHECK-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill |
| ; CHECK-NEXT: mr 3, 30 |
| ; CHECK-NEXT: bl call |
| ; CHECK-NEXT: nop |
| ; CHECK-NEXT: lxvd2x 63, 0, 30 |
| ; CHECK-NEXT: mr 3, 30 |
| ; CHECK-NEXT: bl call |
| ; CHECK-NEXT: nop |
| ; CHECK-NEXT: lxvd2x 34, 0, 30 |
| ; CHECK-NEXT: li 4, 64 |
| ; CHECK-NEXT: ld 30, 80(1) # 8-byte Folded Reload |
| ; CHECK-NEXT: vcmpequb. 2, 31, 2 |
| ; CHECK-NEXT: lxvd2x 63, 1, 4 # 16-byte Folded Reload |
| ; CHECK-NEXT: mfocrf 3, 2 |
| ; CHECK-NEXT: rlwinm 3, 3, 25, 31, 31 |
| ; CHECK-NEXT: addi 1, 1, 96 |
| ; CHECK-NEXT: ld 0, 16(1) |
| ; CHECK-NEXT: mtlr 0 |
| ; CHECK-NEXT: blr |
| %a1 = alloca [16 x i8], align 16 |
| %a2 = alloca [16 x i8], align 16 |
| call void @llvm.lifetime.start.p0(i64 16, ptr %a2) |
| call void @call(ptr %a2) |
| %l1 = load i128, ptr %a2, align 16 |
| call void @llvm.lifetime.end.p0(i64 16, ptr %a2) |
| call void @llvm.lifetime.start.p0(i64 16, ptr %a1) |
| call void @call(ptr %a1) |
| %l2 = load i128, ptr %a1, align 16 |
| call void @llvm.lifetime.end.p0(i64 16, ptr %a1) |
| %res = icmp eq i128 %l1, %l2 |
| ret i1 %res |
| } |
| |
| declare void @call(ptr) |