Files
clang-p2996/llvm/test/Transforms/SROA/fca.ll
Nikita Popov 74e652786b [SROA] Migrate tests to opaque pointers (NFC)
Tests were updated with this script:
https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34

However, in this case a lot of fixup was required, due to many
minor, but ultimately immaterial differences in results. In
particular, the GEP representation changes slightly in many cases,
either because we now use an i8 GEP, or because we now leave a
GEP alone, using it's original index types and (lack of) inbounds.

basictest-opaque-ptrs.ll has been dropped, because it was an
opaque pointers duplicate of basictest.ll.
2022-06-21 12:54:52 +02:00

49 lines
1.4 KiB
LLVM

; RUN: opt < %s -passes=sroa -S | FileCheck %s
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"
define { i32, i32 } @test0(i32 %x, i32 %y, { i32, i32 } %v) {
; CHECK-LABEL: @test0(
; CHECK-NOT: alloca
; CHECK: insertvalue { i32, i32 }
; CHECK: insertvalue { i32, i32 }
; CHECK: ret { i32, i32 }
entry:
%a = alloca { i32, i32 }
store { i32, i32 } %v, ptr %a
%gep1 = getelementptr inbounds { i32, i32 }, ptr %a, i32 0, i32 0
store i32 %x, ptr %gep1
%gep2 = getelementptr inbounds { i32, i32 }, ptr %a, i32 0, i32 1
store i32 %y, ptr %gep2
%result = load { i32, i32 }, ptr %a
ret { i32, i32 } %result
}
define { i32, i32 } @test1(i32 %x, i32 %y) {
; FIXME: This may be too conservative. Duncan argues that we are allowed to
; split the volatile load and store here but must produce volatile scalar loads
; and stores from them.
; CHECK-LABEL: @test1(
; CHECK: alloca
; CHECK: alloca
; CHECK: load volatile { i32, i32 }, ptr
; CHECK: store volatile { i32, i32 }
; CHECK: ret { i32, i32 }
entry:
%a = alloca { i32, i32 }
%b = alloca { i32, i32 }
%gep1 = getelementptr inbounds { i32, i32 }, ptr %a, i32 0, i32 0
store i32 %x, ptr %gep1
%gep2 = getelementptr inbounds { i32, i32 }, ptr %a, i32 0, i32 1
store i32 %y, ptr %gep2
%result = load volatile { i32, i32 }, ptr %a
store volatile { i32, i32 } %result, ptr %b
ret { i32, i32 } %result
}