原始IR
%struct.tm = type {i32, i32, i32}
define %struct.tm @foo(%struct.tm %val)
{
%val_ptr = alloca %struct.tm
%a = extractvalue %struct.tm %val, 0
%a1 = add i32 %a, 1
%a_ptr = getelementptr %struct.tm, %struct.tm * %val_ptr, i32 0, i32 0
store i32 %a1, i32* %a_ptr
%b = extractvalue %struct.tm %val, 1
%b1 = add i32 %b, 1
%b_ptr = getelementptr %struct.tm, %struct.tm * %val_ptr, i32 0, i32 1
store i32 %b1, i32* %b_ptr
%c = extractvalue %struct.tm %val, 2
%c1 = add i32 %c, 1
%c_ptr = getelementptr %struct.tm, %struct.tm * %val_ptr, i32 0, i32 2
store i32 %c1, i32* %c_ptr
%ret_val = load %struct.tm, %struct.tm * %val_ptr
ret %struct.tm %ret_val
}
O3优化后
%struct.tm = type { i32, i32, i32 }
; Function Attrs: norecurse nounwind readnone
define %struct.tm @foo(%struct.tm %val) local_unnamed_addr #0 {
%a = extractval