brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · 87537c0 Raw
122 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes="function(slp-vectorizer)" -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 %s -S | FileCheck %s3 4define void @test(ptr addrspace(1) %base, ptr addrspace(1) %otherA, ptr addrspace(1) %otherB) #0 {5; CHECK-LABEL: define void @test(6; CHECK-SAME: ptr addrspace(1) [[BASE:%.*]], ptr addrspace(1) [[OTHERA:%.*]], ptr addrspace(1) [[OTHERB:%.*]]) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT:  [[ENTRY:.*:]]8; CHECK-NEXT:    [[P0:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 09; CHECK-NEXT:    [[A0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 010; CHECK-NEXT:    [[B0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 011; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x half>, ptr addrspace(1) [[A0PTR]], align 2, !invariant.load [[META0:![0-9]+]]12; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x half>, ptr addrspace(1) [[B0PTR]], align 2, !invariant.load [[META0]]13; CHECK-NEXT:    [[TMP2:%.*]] = fadd reassoc <2 x half> [[TMP0]], [[TMP1]]14; CHECK-NEXT:    store <2 x half> [[TMP2]], ptr addrspace(1) [[P0]], align 215; CHECK-NEXT:    ret void16;17entry:18  %p0 = getelementptr half, ptr addrspace(1) %base, i32 019  %p1 = getelementptr half, ptr addrspace(1) %base, i32 120  ; First pair of invariant loads from otherA.21  %A0PTR = getelementptr half, ptr addrspace(1) %otherA, i32 022  %B0PTR = getelementptr half, ptr addrspace(1) %otherB, i32 023  %A0 = load half, ptr addrspace(1) %A0PTR, align 2, !invariant.load !024  %B0 = load half, ptr addrspace(1) %B0PTR, align 2, !invariant.load !025  %add0 = fadd reassoc half %A0, %B026  store half %add0, ptr addrspace(1) %p0, align 227  %A1PTR = getelementptr half, ptr addrspace(1) %otherA, i32 128  %B1PTR = getelementptr half, ptr addrspace(1) %otherB, i32 129  %A1 = load half, ptr addrspace(1) %A1PTR, align 2, !invariant.load !030  %B1 = load half, ptr addrspace(1) %B1PTR, align 2, !invariant.load !031  %add1 = fadd reassoc half %A1, %B132  store half %add1, ptr addrspace(1) %p1, align 233  ret void34}35 36 37define void @aliastest(ptr addrspace(1) %base, ptr addrspace(1) %otherA, ptr addrspace(1) %otherB) #0 {38; CHECK-LABEL: define void @aliastest(39; CHECK-SAME: ptr addrspace(1) [[BASE:%.*]], ptr addrspace(1) [[OTHERA:%.*]], ptr addrspace(1) [[OTHERB:%.*]]) #[[ATTR0]] {40; CHECK-NEXT:  [[ENTRY:.*:]]41; CHECK-NEXT:    [[P0:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 042; CHECK-NEXT:    [[P1:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 143; CHECK-NEXT:    [[A0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 044; CHECK-NEXT:    [[B0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 045; CHECK-NEXT:    [[A0:%.*]] = load half, ptr addrspace(1) [[A0PTR]], align 246; CHECK-NEXT:    [[B0:%.*]] = load half, ptr addrspace(1) [[B0PTR]], align 247; CHECK-NEXT:    [[ADD0:%.*]] = fadd reassoc half [[A0]], [[B0]]48; CHECK-NEXT:    store half [[ADD0]], ptr addrspace(1) [[P0]], align 249; CHECK-NEXT:    [[A1PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 150; CHECK-NEXT:    [[B1PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 151; CHECK-NEXT:    [[A1:%.*]] = load half, ptr addrspace(1) [[A1PTR]], align 252; CHECK-NEXT:    [[B1:%.*]] = load half, ptr addrspace(1) [[B1PTR]], align 253; CHECK-NEXT:    [[ADD1:%.*]] = fadd reassoc half [[A1]], [[B1]]54; CHECK-NEXT:    store half [[ADD1]], ptr addrspace(1) [[P1]], align 255; CHECK-NEXT:    ret void56;57entry:58  %p0 = getelementptr half, ptr addrspace(1) %base, i32 059  %p1 = getelementptr half, ptr addrspace(1) %base, i32 160  ; First pair of invariant loads from otherA.61  %A0PTR = getelementptr half, ptr addrspace(1) %otherA, i32 062  %B0PTR = getelementptr half, ptr addrspace(1) %otherB, i32 063  %A0 = load half, ptr addrspace(1) %A0PTR, align 264  %B0 = load half, ptr addrspace(1) %B0PTR, align 265  %add0 = fadd reassoc half %A0, %B066  store half %add0, ptr addrspace(1) %p0, align 267  %A1PTR = getelementptr half, ptr addrspace(1) %otherA, i32 168  %B1PTR = getelementptr half, ptr addrspace(1) %otherB, i32 169  %A1 = load half, ptr addrspace(1) %A1PTR, align 270  %B1 = load half, ptr addrspace(1) %B1PTR, align 271  %add1 = fadd reassoc half %A1, %B172  store half %add1, ptr addrspace(1) %p1, align 273  ret void74}75 76define void @voltest(ptr addrspace(1) %base, ptr addrspace(1) %otherA, ptr addrspace(1) %otherB) #0 {77; CHECK-LABEL: define void @voltest(78; CHECK-SAME: ptr addrspace(1) [[BASE:%.*]], ptr addrspace(1) [[OTHERA:%.*]], ptr addrspace(1) [[OTHERB:%.*]]) #[[ATTR0]] {79; CHECK-NEXT:  [[ENTRY:.*:]]80; CHECK-NEXT:    [[P0:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 081; CHECK-NEXT:    [[P1:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 182; CHECK-NEXT:    [[A0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 083; CHECK-NEXT:    [[B0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 084; CHECK-NEXT:    [[A0:%.*]] = load volatile half, ptr addrspace(1) [[A0PTR]], align 2, !invariant.load [[META0]]85; CHECK-NEXT:    [[B0:%.*]] = load volatile half, ptr addrspace(1) [[B0PTR]], align 2, !invariant.load [[META0]]86; CHECK-NEXT:    [[ADD0:%.*]] = fadd reassoc half [[A0]], [[B0]]87; CHECK-NEXT:    store half [[ADD0]], ptr addrspace(1) [[P0]], align 288; CHECK-NEXT:    [[A1PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 189; CHECK-NEXT:    [[B1PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 190; CHECK-NEXT:    [[A1:%.*]] = load volatile half, ptr addrspace(1) [[A1PTR]], align 2, !invariant.load [[META0]]91; CHECK-NEXT:    [[B1:%.*]] = load volatile half, ptr addrspace(1) [[B1PTR]], align 2, !invariant.load [[META0]]92; CHECK-NEXT:    [[ADD1:%.*]] = fadd reassoc half [[A1]], [[B1]]93; CHECK-NEXT:    store half [[ADD1]], ptr addrspace(1) [[P1]], align 294; CHECK-NEXT:    ret void95;96entry:97  %p0 = getelementptr half, ptr addrspace(1) %base, i32 098  %p1 = getelementptr half, ptr addrspace(1) %base, i32 199  ; First pair of invariant loads from otherA.100  %A0PTR = getelementptr half, ptr addrspace(1) %otherA, i32 0101  %B0PTR = getelementptr half, ptr addrspace(1) %otherB, i32 0102  %A0 = load volatile half, ptr addrspace(1) %A0PTR, align 2, !invariant.load !0103  %B0 = load volatile half, ptr addrspace(1) %B0PTR, align 2, !invariant.load !0104  %add0 = fadd reassoc half %A0, %B0105  store half %add0, ptr addrspace(1) %p0, align 2106  %A1PTR = getelementptr half, ptr addrspace(1) %otherA, i32 1107  %B1PTR = getelementptr half, ptr addrspace(1) %otherB, i32 1108  %A1 = load volatile half, ptr addrspace(1) %A1PTR, align 2, !invariant.load !0109  %B1 = load volatile half, ptr addrspace(1) %B1PTR, align 2, !invariant.load !0110  %add1 = fadd reassoc half %A1, %B1111  store half %add1, ptr addrspace(1) %p1, align 2112  ret void113}114 115 116attributes #0 = { nounwind }117 118!0 = !{}119;.120; CHECK: [[META0]] = !{}121;.122