@@ -809,68 +809,70 @@ struct st5 {
809
809
810
810
// LE-LABEL: @st5_check_load(
811
811
// LE-NEXT: entry:
812
- // LE-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
813
- // LE-NEXT: [[BF_LOAD :%.*]] = load volatile i8, ptr [[C ]], align 2
814
- // LE-NEXT: [[BF_SHL :%.*]] = shl i8 [[BF_LOAD ]], 3
815
- // LE-NEXT: [[BF_ASHR :%.*]] = ashr i8 [[BF_SHL]], 3
816
- // LE-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR ]] to i32
812
+ // LE-NEXT: [[BF_LOAD :%.*]] = load volatile i32 , ptr [[M:%.*]], align 4
813
+ // LE-NEXT: [[BF_SHL :%.*]] = shl i32 [[BF_LOAD ]], 11
814
+ // LE-NEXT: [[BF_ASHR :%.*]] = ashr i32 [[BF_SHL ]], 27
815
+ // LE-NEXT: [[BF_CAST :%.*]] = trunc i32 [[BF_ASHR]] to i8
816
+ // LE-NEXT: [[CONV:%.*]] = sext i8 [[BF_CAST ]] to i32
817
817
// LE-NEXT: ret i32 [[CONV]]
818
818
//
819
819
// BE-LABEL: @st5_check_load(
820
820
// BE-NEXT: entry:
821
- // BE-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]], ptr [[M:%.*]], i32 0, i32 1
822
- // BE-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 2
823
- // BE-NEXT: [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 3
824
- // BE-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32
821
+ // BE-NEXT: [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4
822
+ // BE-NEXT: [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16
823
+ // BE-NEXT: [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 27
824
+ // BE-NEXT: [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i8
825
+ // BE-NEXT: [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32
825
826
// BE-NEXT: ret i32 [[CONV]]
826
827
//
827
828
// LENUMLOADS-LABEL: @st5_check_load(
828
829
// LENUMLOADS-NEXT: entry:
829
- // LENUMLOADS-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
830
- // LENUMLOADS-NEXT: [[BF_LOAD :%.*]] = load volatile i8, ptr [[C ]], align 2
831
- // LENUMLOADS-NEXT: [[BF_SHL :%.*]] = shl i8 [[BF_LOAD ]], 3
832
- // LENUMLOADS-NEXT: [[BF_ASHR :%.*]] = ashr i8 [[BF_SHL]], 3
833
- // LENUMLOADS-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR ]] to i32
830
+ // LENUMLOADS-NEXT: [[BF_LOAD :%.*]] = load volatile i32 , ptr [[M:%.*]], align 4
831
+ // LENUMLOADS-NEXT: [[BF_SHL :%.*]] = shl i32 [[BF_LOAD ]], 11
832
+ // LENUMLOADS-NEXT: [[BF_ASHR :%.*]] = ashr i32 [[BF_SHL ]], 27
833
+ // LENUMLOADS-NEXT: [[BF_CAST :%.*]] = trunc i32 [[BF_ASHR]] to i8
834
+ // LENUMLOADS-NEXT: [[CONV:%.*]] = sext i8 [[BF_CAST ]] to i32
834
835
// LENUMLOADS-NEXT: ret i32 [[CONV]]
835
836
//
836
837
// BENUMLOADS-LABEL: @st5_check_load(
837
838
// BENUMLOADS-NEXT: entry:
838
- // BENUMLOADS-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]], ptr [[M:%.*]], i32 0, i32 1
839
- // BENUMLOADS-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 2
840
- // BENUMLOADS-NEXT: [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 3
841
- // BENUMLOADS-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32
839
+ // BENUMLOADS-NEXT: [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4
840
+ // BENUMLOADS-NEXT: [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16
841
+ // BENUMLOADS-NEXT: [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 27
842
+ // BENUMLOADS-NEXT: [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i8
843
+ // BENUMLOADS-NEXT: [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32
842
844
// BENUMLOADS-NEXT: ret i32 [[CONV]]
843
845
//
844
846
// LEWIDTH-LABEL: @st5_check_load(
845
847
// LEWIDTH-NEXT: entry:
846
- // LEWIDTH-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
847
- // LEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
848
+ // LEWIDTH-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
849
+ // LEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
848
850
// LEWIDTH-NEXT: [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 3
849
851
// LEWIDTH-NEXT: [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3
850
852
// LEWIDTH-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32
851
853
// LEWIDTH-NEXT: ret i32 [[CONV]]
852
854
//
853
855
// BEWIDTH-LABEL: @st5_check_load(
854
856
// BEWIDTH-NEXT: entry:
855
- // BEWIDTH-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
856
- // BEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
857
+ // BEWIDTH-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
858
+ // BEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
857
859
// BEWIDTH-NEXT: [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 3
858
860
// BEWIDTH-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32
859
861
// BEWIDTH-NEXT: ret i32 [[CONV]]
860
862
//
861
863
// LEWIDTHNUM-LABEL: @st5_check_load(
862
864
// LEWIDTHNUM-NEXT: entry:
863
- // LEWIDTHNUM-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
864
- // LEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
865
+ // LEWIDTHNUM-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
866
+ // LEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
865
867
// LEWIDTHNUM-NEXT: [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 3
866
868
// LEWIDTHNUM-NEXT: [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3
867
869
// LEWIDTHNUM-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32
868
870
// LEWIDTHNUM-NEXT: ret i32 [[CONV]]
869
871
//
870
872
// BEWIDTHNUM-LABEL: @st5_check_load(
871
873
// BEWIDTHNUM-NEXT: entry:
872
- // BEWIDTHNUM-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
873
- // BEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
874
+ // BEWIDTHNUM-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
875
+ // BEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
874
876
// BEWIDTHNUM-NEXT: [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 3
875
877
// BEWIDTHNUM-NEXT: [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32
876
878
// BEWIDTHNUM-NEXT: ret i32 [[CONV]]
@@ -881,74 +883,70 @@ int st5_check_load(struct st5 *m) {
881
883
882
884
// LE-LABEL: @st5_check_store(
883
885
// LE-NEXT: entry:
884
- // LE-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]], ptr [[M:%.*]], i32 0, i32 1
885
- // LE-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 2
886
- // LE-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -32
887
- // LE-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1
888
- // LE-NEXT: store volatile i8 [[BF_SET]], ptr [[C]], align 2
886
+ // LE-NEXT: [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4
887
+ // LE-NEXT: [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -2031617
888
+ // LE-NEXT: [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536
889
+ // LE-NEXT: store volatile i32 [[BF_SET]], ptr [[M]], align 4
889
890
// LE-NEXT: ret void
890
891
//
891
892
// BE-LABEL: @st5_check_store(
892
893
// BE-NEXT: entry:
893
- // BE-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]], ptr [[M:%.*]], i32 0, i32 1
894
- // BE-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 2
895
- // BE-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 7
896
- // BE-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 8
897
- // BE-NEXT: store volatile i8 [[BF_SET]], ptr [[C]], align 2
894
+ // BE-NEXT: [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4
895
+ // BE-NEXT: [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -63489
896
+ // BE-NEXT: [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2048
897
+ // BE-NEXT: store volatile i32 [[BF_SET]], ptr [[M]], align 4
898
898
// BE-NEXT: ret void
899
899
//
900
900
// LENUMLOADS-LABEL: @st5_check_store(
901
901
// LENUMLOADS-NEXT: entry:
902
- // LENUMLOADS-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]], ptr [[M:%.*]], i32 0, i32 1
903
- // LENUMLOADS-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 2
904
- // LENUMLOADS-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -32
905
- // LENUMLOADS-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1
906
- // LENUMLOADS-NEXT: store volatile i8 [[BF_SET]], ptr [[C]], align 2
902
+ // LENUMLOADS-NEXT: [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4
903
+ // LENUMLOADS-NEXT: [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -2031617
904
+ // LENUMLOADS-NEXT: [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536
905
+ // LENUMLOADS-NEXT: store volatile i32 [[BF_SET]], ptr [[M]], align 4
907
906
// LENUMLOADS-NEXT: ret void
908
907
//
909
908
// BENUMLOADS-LABEL: @st5_check_store(
910
909
// BENUMLOADS-NEXT: entry:
911
- // BENUMLOADS-NEXT: [[C:%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]], ptr [[M:%.*]], i32 0, i32 1
912
- // BENUMLOADS-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 2
913
- // BENUMLOADS-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 7
914
- // BENUMLOADS-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 8
915
- // BENUMLOADS-NEXT: store volatile i8 [[BF_SET]], ptr [[C]], align 2
910
+ // BENUMLOADS-NEXT: [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4
911
+ // BENUMLOADS-NEXT: [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -63489
912
+ // BENUMLOADS-NEXT: [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2048
913
+ // BENUMLOADS-NEXT: store volatile i32 [[BF_SET]], ptr [[M]], align 4
916
914
// BENUMLOADS-NEXT: ret void
917
915
//
918
916
// LEWIDTH-LABEL: @st5_check_store(
919
917
// LEWIDTH-NEXT: entry:
920
- // LEWIDTH-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
921
- // LEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
918
+ // LEWIDTH-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
919
+ // LEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
922
920
// LEWIDTH-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -32
923
921
// LEWIDTH-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1
924
- // LEWIDTH-NEXT: store volatile i8 [[BF_SET]], ptr [[C ]], align 2
922
+ // LEWIDTH-NEXT: store volatile i8 [[BF_SET]], ptr [[TMP0 ]], align 2
925
923
// LEWIDTH-NEXT: ret void
926
924
//
927
925
// BEWIDTH-LABEL: @st5_check_store(
928
926
// BEWIDTH-NEXT: entry:
929
- // BEWIDTH-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
930
- // BEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
927
+ // BEWIDTH-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
928
+ // BEWIDTH-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
931
929
// BEWIDTH-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 7
932
930
// BEWIDTH-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 8
933
- // BEWIDTH-NEXT: store volatile i8 [[BF_SET]], ptr [[C ]], align 2
931
+ // BEWIDTH-NEXT: store volatile i8 [[BF_SET]], ptr [[TMP0 ]], align 2
934
932
// BEWIDTH-NEXT: ret void
935
933
//
936
934
// LEWIDTHNUM-LABEL: @st5_check_store(
937
935
// LEWIDTHNUM-NEXT: entry:
938
- // LEWIDTHNUM-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
939
- // LEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
936
+ // LEWIDTHNUM-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
937
+ // LEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
940
938
// LEWIDTHNUM-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -32
941
939
// LEWIDTHNUM-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1
942
- // LEWIDTHNUM-NEXT: store volatile i8 [[BF_SET]], ptr [[C ]], align 2
940
+ // LEWIDTHNUM-NEXT: store volatile i8 [[BF_SET]], ptr [[TMP0 ]], align 2
943
941
// LEWIDTHNUM-NEXT: ret void
944
942
//
945
943
// BEWIDTHNUM-LABEL: @st5_check_store(
946
944
// BEWIDTHNUM-NEXT: entry:
947
- // BEWIDTHNUM-NEXT: [[C :%.*]] = getelementptr inbounds [[STRUCT_ST5:%.*]] , ptr [[M:%.*]], i32 0, i32 1
948
- // BEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[C ]], align 2
945
+ // BEWIDTHNUM-NEXT: [[TMP0 :%.*]] = getelementptr inbounds i8 , ptr [[M:%.*]], i32 2
946
+ // BEWIDTHNUM-NEXT: [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0 ]], align 2
949
947
// BEWIDTHNUM-NEXT: [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 7
950
948
// BEWIDTHNUM-NEXT: [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 8
951
- // BEWIDTHNUM-NEXT: store volatile i8 [[BF_SET]], ptr [[C ]], align 2
949
+ // BEWIDTHNUM-NEXT: store volatile i8 [[BF_SET]], ptr [[TMP0 ]], align 2
952
950
// BEWIDTHNUM-NEXT: ret void
953
951
//
954
952
void st5_check_store (struct st5 * m ) {
0 commit comments