brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 6997c9f Raw
90 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=arm64-darwin-unknown -S -passes=consthoist < %s | FileCheck %s3 4; Make sure we hoist constants out of intrinsics.5 6define void @test_stxr(ptr %ptr) {7; CHECK-LABEL: @test_stxr(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[CONST:%.*]] = bitcast i64 -9223372036317904832 to i6410; CHECK-NEXT:    [[CONST_MAT:%.*]] = add i64 [[CONST]], -6411; CHECK-NEXT:    [[BAR_0:%.*]] = call i32 @llvm.aarch64.stxr.p0(i64 [[CONST_MAT]], ptr elementtype(i64) [[PTR:%.*]])12; CHECK-NEXT:    [[PTR_1:%.*]] = getelementptr i64, ptr [[PTR]], i64 113; CHECK-NEXT:    [[BAR_1:%.*]] = call i32 @llvm.aarch64.stxr.p0(i64 [[CONST]], ptr elementtype(i64) [[PTR_1]])14; CHECK-NEXT:    [[PTR_2:%.*]] = getelementptr i64, ptr [[PTR]], i64 215; CHECK-NEXT:    [[CONST_MAT1:%.*]] = add i64 [[CONST]], 6416; CHECK-NEXT:    [[BAR_2:%.*]] = call i32 @llvm.aarch64.stxr.p0(i64 [[CONST_MAT1]], ptr elementtype(i64) [[PTR_2]])17; CHECK-NEXT:    [[PTR_3:%.*]] = getelementptr i64, ptr [[PTR]], i64 318; CHECK-NEXT:    [[CONST_MAT2:%.*]] = add i64 [[CONST]], 12819; CHECK-NEXT:    [[BAR_3:%.*]] = call i32 @llvm.aarch64.stxr.p0(i64 [[CONST_MAT2]], ptr elementtype(i64) [[PTR_3]])20; CHECK-NEXT:    ret void21;22entry:23  %bar.0 = call i32 @llvm.aarch64.stxr.p0(i64 -9223372036317904896, ptr elementtype(i64) %ptr)24  %ptr.1 = getelementptr i64, ptr %ptr, i64 125  %bar.1 = call i32 @llvm.aarch64.stxr.p0(i64 -9223372036317904832,  ptr elementtype(i64) %ptr.1)26  %ptr.2 = getelementptr i64, ptr %ptr, i64 227  %bar.2 = call i32 @llvm.aarch64.stxr.p0(i64 -9223372036317904768, ptr elementtype(i64) %ptr.2)28  %ptr.3 = getelementptr i64, ptr %ptr, i64 329  %bar.3 = call i32 @llvm.aarch64.stxr.p0(i64 -9223372036317904704, ptr elementtype(i64) %ptr.3)30  ret void31}32 33declare i32 @llvm.aarch64.stxr.p0(i64 , ptr)34 35define i64 @test_udiv(i64 %x) {36; CHECK-LABEL: @test_udiv(37; CHECK-NEXT:  entry:38; CHECK-NEXT:    [[CONST:%.*]] = bitcast i64 -9223372036317904832 to i6439; CHECK-NEXT:    [[CONST_MAT:%.*]] = add i64 [[CONST]], -6440; CHECK-NEXT:    [[BAR_0:%.*]] = call i64 @llvm.aarch64.udiv.i64(i64 [[CONST_MAT]], i64 [[X:%.*]])41; CHECK-NEXT:    [[BAR_1:%.*]] = call i64 @llvm.aarch64.udiv.i64(i64 [[CONST]], i64 [[X]])42; CHECK-NEXT:    [[CONST_MAT1:%.*]] = add i64 [[CONST]], 6443; CHECK-NEXT:    [[BAR_2:%.*]] = call i64 @llvm.aarch64.udiv.i64(i64 [[CONST_MAT1]], i64 [[X]])44; CHECK-NEXT:    [[CONST_MAT2:%.*]] = add i64 [[CONST]], 12845; CHECK-NEXT:    [[BAR_3:%.*]] = call i64 @llvm.aarch64.udiv.i64(i64 [[CONST_MAT2]], i64 [[X]])46; CHECK-NEXT:    [[RES_1:%.*]] = add i64 [[BAR_0]], [[BAR_1]]47; CHECK-NEXT:    [[RES_2:%.*]] = add i64 [[RES_1]], [[BAR_2]]48; CHECK-NEXT:    [[RES_3:%.*]] = add i64 [[RES_2]], [[BAR_3]]49; CHECK-NEXT:    ret i64 [[RES_3]]50;51entry:52  %bar.0 = call i64 @llvm.aarch64.udiv.i64.i64(i64 -9223372036317904896, i64 %x)53  %bar.1 = call i64 @llvm.aarch64.udiv.i64.i64(i64 -9223372036317904832,  i64 %x)54  %bar.2 = call i64 @llvm.aarch64.udiv.i64.i64(i64 -9223372036317904768, i64 %x)55  %bar.3 = call i64 @llvm.aarch64.udiv.i64.i64(i64 -9223372036317904704, i64 %x)56  %res.1 = add i64 %bar.0, %bar.157  %res.2 = add i64 %res.1, %bar.258  %res.3 = add i64 %res.2, %bar.359  ret i64 %res.360}61 62declare i64 @llvm.aarch64.udiv.i64.i64(i64, i64)63 64define void @test_free_intrinsics(i64 %x) {65; CHECK-LABEL: @test_free_intrinsics(66; CHECK-NEXT:  entry:67; CHECK-NEXT:    [[PTR:%.*]] = alloca i8, align 168; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[PTR]])69; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[PTR]])70; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[PTR]])71; CHECK-NEXT:    [[I:%.*]] = call ptr @llvm.invariant.start.p0(i64 100000000256, ptr [[PTR]])72; CHECK-NEXT:    call void @llvm.invariant.end.p0(ptr [[I]], i64 100000000256, ptr [[PTR]])73; CHECK-NEXT:    ret void74;75entry:76  %ptr = alloca i877  call void @llvm.lifetime.start.p0(ptr %ptr)78  call void @llvm.lifetime.start.p0(ptr %ptr)79  call void @llvm.lifetime.end.p0(ptr %ptr)80  %i = call ptr @llvm.invariant.start.p0(i64 100000000256, ptr %ptr)81  call void @llvm.invariant.end.p0(ptr %i, i64 100000000256, ptr %ptr)82  ret void83}84 85declare void @llvm.lifetime.start.p0(ptr)86declare void @llvm.lifetime.end.p0(ptr)87 88declare ptr @llvm.invariant.start.p0(i64, ptr nocapture)89declare void @llvm.invariant.end.p0(ptr, i64, ptr nocapture)90