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